Подтвердить что ты не робот

POSTing JSON для URL через WebClient в С#

У меня есть код JavaScript, который мне нужно преобразовать в С#. Мой JavaScript-код отправляет сообщение JSON на созданный веб-сервис. Этот код JavaScript отлично работает и выглядит следующим образом:

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");
}

Я пытаюсь понять, как преобразовать это в С#. Мое приложение использует .NET 2.0. Из того, что я могу сказать, мне нужно сделать что-то вроде следующего:

using (WebClient client = new WebClient())
{
  string json = "?";
  client.UploadString("http://www.mysite.com/1.0/service/action", json);
}

Я немного застрял в этой точке. Я не уверен, что должно выглядеть json. Я не уверен, нужно ли устанавливать тип содержимого. Если я это сделаю, я не уверен, как это сделать. Я также видел UploadData. Итак, я не уверен, что я даже использую правильный метод. В некотором смысле, сериализация моих данных - моя проблема.

Может ли кто-нибудь сказать мне, что мне здесь не хватает?

Спасибо!

4b9b3361

Ответ 1

Вам нужен сериализатор json для анализа вашего контента, возможно, у вас его уже есть, для вашего первоначального вопроса о том, как сделать запрос, это может быть идея:

        var baseAddress = "http://www.mysite.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();

надеюсь, что это поможет,

Ответ 2

Вопрос уже ответил, но я думаю, что я нашел решение, которое проще и более актуально для названия вопроса, вот оно:

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

Ответ 3

В следующем примере показано, как выполнить POST JSON с помощью метода WebClient.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);
}

Предпосылки: библиотека Json.NET