Wysyłanie JSON na adres URL przez WebClient w C#

Mam trochę kodu JavaScript, który muszę przekonwertować do C#. Mój kod JavaScript umieszcza JSON w usłudze internetowej, która została utworzona. Ten kod JavaScript działa dobrze i wygląda następująco:

var vm = { k: "1", a: "2", c: "3", v: "4" };
$.ajax({
  url: "http://www.mysite.com/1.0/service/action",
  type: "POST",
  data: JSON.stringify(vm),
  contentType: "application/json;charset=utf-8",
  success: action_Succeeded,
  error: action_Failed
});

function action_Succeeded(r) {
  console.log(r);
}

function log_Failed(r1, r2, r3) {
  alert("fail");
}

Próbuję dowiedzieć się, jak przekonwertować to do C#. Moja aplikacja używa. NET 2.0. Z tego co wiem, muszę zrobić coś takiego:

using (WebClient client = new WebClient())
{
  string json = "?";
  client.UploadString("http://www.mysite.com/1.0/service/action", json);
}
Utknąłem w tym momencie. Nie wiem, jak powinno wyglądać. Nie wiem czy muszę Ustaw typ zawartości. Jeśli tak, to nie wiem, jak to zrobić. Widziałem też UploadData. Więc nie jestem pewien, czy w ogóle stosuję właściwą metodę. W pewnym sensie serializacja moich danych jest moim problemem. Czy ktoś może mi powiedzieć, co mi umyka? Dziękuję!
Author: Eels Fan, 2013-02-26

3 answers

Potrzebujesz JSON serializer do analizy treści, prawdopodobnie już go masz, w przypadku początkowego pytania, jak złożyć wniosek, może to być pomysł:

var baseAddress = "http://www.example.com/1.0/service/action";

var http = (HttpWebRequest)WebRequest.Create(new Uri(baseAddress));
http.Accept = "application/json";
http.ContentType = "application/json";
http.Method = "POST";

string parsedContent = <<PUT HERE YOUR JSON PARSED CONTENT>>;
ASCIIEncoding encoding = new ASCIIEncoding();
Byte[] bytes = encoding.GetBytes(parsedContent);

Stream newStream = http.GetRequestStream();
newStream.Write(bytes, 0, bytes.Length);
newStream.Close();

var response = http.GetResponse();

var stream = response.GetResponseStream();
var sr = new StreamReader(stream);
var content = sr.ReadToEnd();

Hope it helps,

 73
Author: Jorge Alvarado,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-10-11 15:37:09

Pytanie jest już odpowiedział, Ale myślę, że znalazłem rozwiązanie, które jest prostsze i bardziej istotne dla tytułu pytania, tutaj jest:

var cli = new WebClient();
cli.Headers[HttpRequestHeader.ContentType] = "application/json";
string response = cli.UploadString("http://some/address", "{some:\"json data\"}");

PS: w większości implementacji. NET, ale nie we wszystkich WebClient jest IDisposable, więc oczywiście lepiej jest zrobić ' using 'lub' Dispose ' na nim. Jednak w tym konkretnym przypadku nie jest to naprawdę konieczne .

 197
Author: sarh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-11-11 12:31:42

Poniższy przykład pokazuje, jak opublikować JSON za pomocą WebClient.Metoda UploadString :

var vm = new { k = "1", a = "2", c = "3", v=  "4" };
using (var client = new WebClient())
{
   var dataString = JsonConvert.SerializeObject(vm);
   client.Headers.Add(HttpRequestHeader.ContentType, "application/json");
   client.UploadString(new Uri("http://www.contoso.com/1.0/service/action"), "POST", dataString);
}

Wymagania wstępne: Json.NET biblioteka

 74
Author: Vadim Gremyachev,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-08 10:24:55