나는 같은 동적 객체를 보내고 싶다
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 태그가 더 이상 필요하지 않습니다.