Полезная нагрузка JSON для HttpClient в C#?

Как передать полезную нагрузку JSON для использования службы REST.

Вот что я пытаюсь:

var requestUrl = "http://example.org";

using (var client = new HttpClient())
{
    client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualifiedHeaderValue("application/json"));
    var result = client.Post(requestUrl);

    var content = result.Content.ReadAsString();
    dynamic value = JsonValue.Parse(content);

    string msg = String.Format("{0} {1}", value.SomeTest, value.AnotherTest);

    return msg;
}

Как передать что-то подобное в качестве параметра в запрос?:

{"SomeProp1":"abc","AnotherProp1":"123","NextProp2":"zyx"}

3 ответа

Решение

Я получил ответ отсюда: POSTing JsonObject с помощью HttpClient From Web API

httpClient.Post(
    myJsonString,
    new StringContent(
        myObject.ToString(),
        Encoding.UTF8,
        "application/json"));

Вот аналогичный ответ, показывающий, как разместить необработанный JSON:

Данные формата Json из консольного приложения в стек служб

const string RemoteUrl = "http://www.servicestack.net/ServiceStack.Hello/servicestack/hello";

var httpReq = (HttpWebRequest)WebRequest.Create(RemoteUrl);
httpReq.Method = "POST";
httpReq.ContentType = httpReq.Accept = "application/json";

using (var stream = httpReq.GetRequestStream())
using (var sw = new StreamWriter(stream))
{
    sw.Write("{\"Name\":\"World!\"}");
}

using (var response = httpReq.GetResponse())
using (var stream = response.GetResponseStream())
using (var reader = new StreamReader(stream))
{
    Assert.That(reader.ReadToEnd(), Is.EqualTo("{\"Result\":\"Hello, World!\"}"));
}

Как запрос HTTP GET строго HTTP, я не думаю, что вы можете опубликовать этот JSON как есть - вам нужно будет кодировать его URL и передавать в качестве аргументов строки запроса.

Однако вы можете отправить этому JSON тело содержимого запроса POST через WebRequest / WebClient.

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

http://msdn.microsoft.com/en-us/library/debx8sh9.aspx

Другие вопросы по тегам