[C#] 웹 API에서 HttpClient를 사용하여 JsonObject 게시

Web API에서 JsonObject사용 을 POST하려고합니다 HttpClient. 이 문제를 해결하는 방법을 잘 모르겠으며 샘플 코드를 많이 찾을 수 없습니다.

여기까지 내가 가진 것입니다 :

var myObject = (dynamic)new JsonObject();
myObject.Data = "some data";
myObject.Data2 = "some more data";

HttpClient httpClient = new HttpClient("myurl");
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

HttpResponseMessage response = httpClient.Post("", ???);

나는 내 JsonObject것으로 캐스팅해야한다고 생각 StreamContent하지만 그 단계에 매달리고 있습니다.



답변

패키지 의 새 버전 HttpClientWebApi패키지가없는 경우 :

var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
var result = client.PostAsync(url, content).Result;

또는 원하는 경우 async:

var result = await client.PostAsync(url, content);


답변

가장 쉬운 방법은 StringContentJSON 객체의 JSON 표현과 함께 를 사용하는 것 입니다.

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


답변

.NET 버전에 따라 사용할 수도 있습니다 HttpClientExtensions.PostAsJsonAsync 방법 .

https://msdn.microsoft.com/en-us/library/system.net.http.httpclientextensions.postasjsonasync.aspx


답변

Newtonsoft.Json을 사용하는 경우 :

using Newtonsoft.Json;
using System.Net.Http;
using System.Text;

public static class Extensions
{
    public static StringContent AsJson(this object o)
        => new StringContent(JsonConvert.SerializeObject(o), Encoding.UTF8, "application/json");
}

예:

var httpClient = new HttpClient();
var url = "https://www.duolingo.com/2016-04-13/login?fields=";
var data = new { identifier = "username", password = "password" };
var result = await httpClient.PostAsync(url, data.AsJson())


답변

pomber의 답변에 대한 의견을 추가 할만 큼 평판이 충분하지 않아 다른 답변을 게시하고 있습니다. pomber의 접근 방식을 사용하여 API에서 “400 Bad Request”응답을 계속 수신했습니다 .JSON 요청을 게시했습니다 (Visual Studio 2017, .NET 4.6.2). 결국 문제는 StringContent ()에 의해 생성 된 “Content-Type”헤더로 잘못 추적되었습니다 ( https://github.com/dotnet/corefx/issues/7864 참조). ).

tl; dr

추가 행과 함께 pomber의 답변을 사용하여 요청에 헤더를 올바르게 설정하십시오.

var content = new StringContent(jsonObject.ToString(), Encoding.UTF8, "application/json");
content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
var result = client.PostAsync(url, content).Result;


답변

vbnet의 코드 :

dim FeToSend as new (object--> define class)

Dim client As New HttpClient
Dim content = New StringContent(FeToSend.ToString(), Encoding.UTF8,"application/json")
content.Headers.ContentType = New MediaTypeHeaderValue( "application/json" )
Dim risp = client.PostAsync(Chiamata, content).Result

msgbox(risp.tostring)

이 도움을 바랍니다


답변