[C#] HttpClient PostAsJsonAsync를 사용하여 ASP.NET Core에서 HTTP POST 메시지 보내기

나는 같은 동적 객체를 보내고 싶다

new { x = 1, y = 2 };

HTTP POST 메시지의 본문으로. 그래서 쓰려고 노력합니다

var client = new HttpClient();

하지만 방법을 찾을 수 없습니다

client.PostAsJsonAsync()

그래서 Microsoft.AspNetCore.Http.Extensions 패키지를 project.json에 추가하고 추가하려고했습니다.

using Microsoft.AspNetCore.Http.Extensions; 

to uses 절. 그러나 그것은 도움이되지 않았습니다.

그렇다면 ASP.NET Core에서 JSON 본문으로 POST 요청을 보내는 가장 쉬운 방법은 무엇입니까?



답변

“Microsoft.AspNet.WebApi.Client”패키지에 대한 참조를 추가해야합니다 ( 샘플에 대해서는 이 기사 를 읽으십시오 ).

추가 확장이 없으면 표준 PostAsync방법을 사용할 수 있습니다 .

client.PostAsync(uri, new StringContent(jsonInString, Encoding.UTF8, "application/json"));

jsonInString전화로 얻을 수 있는 가치JsonConvert.SerializeObject(<your object>);


답변

이 수업을 사용합니다 :

public class JsonContent : StringContent
{
    public JsonContent(object obj) :
        base(JsonConvert.SerializeObject(obj), Encoding.UTF8, "application/json")
    { }
}

사용 예 :

new HttpClient().PostAsync("http://...", new JsonContent(new { x = 1, y = 2 }));


답변

수락 된 답변에 Accept헤더를 추가하고 싶습니다 httpClient.

httpClient.DefaultRequestHeaders.Accept.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));


답변

이것이 .NET Core에서 오랫동안 구현되어 왔습니다.

작성 시점 (2019 년 9 월) project.json에 NuGet 3.x + 파일이 https://docs.microsoft.com/en-us/nuget/archive/project-json에PackageReference 설명 된대로 대체되었습니다 .

클래스 의 *Async메소드에 액세스하려면 파일이 올바르게 구성되어 있어야합니다.HttpClient.csproj

열려있는 .csproj일반 텍스트 편집기에서 파일을하고 있는지 첫 번째 줄이 만들어
<Project Sdk="Microsoft.NET.Sdk.Web">
에서 뾰족한 아웃로 ( https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj#the -csproj-format ).

클래스 의 *Async메소드에 액세스하려면 다음 과 같이 파일 에 HttpClient올바른 패키지 참조 가 있어야합니다 .csproj.

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Microsoft.AspNetCore.App" />
    <!-- ... -->
</ItemGroup>

https://docs.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#adding-a-packagereference를 참조 하십시오 . 또한 ASP.NET Core 2.1 및 나중에 Microsoft.AspNetCore.App 메타 패키지 ( https://docs.microsoft.com/en-us/aspnet/core/fundamentals/metapackage )를 사용하십시오.

같은 방법 PostAsJsonAsync, ReadAsAsync, PutAsJsonAsync그리고 DeleteAsync지금은 상자 밖으로 작동합니다. (사용 지시문이 필요하지 않습니다.)

업데이트 : .NET Core 3.0에서는 PackageReference 태그가 더 이상 필요하지 않습니다.


답변