HttpClient가 PostAsJsonAsync 메소드 C #을 지원하지 않습니다


255

웹 응용 프로그램에서 웹 API를 호출하려고합니다. .Net 4.5를 사용하고 있으며 코드를 작성하는 동안 오류 HttpClient에 정의 PostAsJsonAsync방법이 포함되어 있지 않습니다 .

아래는 코드입니다.

HttpClient client = new HttpClient();
client.BaseAddress = new Uri("http://localhost:51093/");
client.DefaultRequestHeaders.Accept.Add(
   new MediaTypeWithQualityHeaderValue("application/json"));
var user = new Users();
user.AgentCode = 100;
user.Remarks = "Test";
user.CollectionDate = System.DateTime.Today;
user.RemittanceDate = System.DateTime.Today;
user.TotalAmount = 1000;
user.OrgBranchID = 101;

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

오류 메시지가 나타납니다.

오류 : 'System.Net.Http.HttpClient'에 'PostAsJsonAsync'에 대한 정의가 포함되어 있지 않으며 'System.Net.Http.HttpClient'유형의 첫 번째 인수를 허용하는 확장 메소드 'PostAsJsonAsync'가 없습니다. 지시어 또는 어셈블리 참조를 사용합니까?)

보고 조언 해주세요.


13
가장 좋은 방법은 'Microsoft.AspNet.WebApi.Client'.Nuget 패키지를 추가하는 것입니다. 그게 다야!
Sachin Pawar

답변:


435

예, 참조를 추가해야합니다.

System.Net.Http.Formatting.dll

이것은 확장 어셈블리 영역에서 찾을 수 있습니다.

이를 달성하는 좋은 방법은 프로젝트에 NuGet 패키지Microsoft.AspNet.WebApi.Client 를 추가하는 것 입니다.


7
파일이나 어셈블리 'Newtonsoft.Json, Version = 4.5.0.0, Culture = neutral, PublicKeyToken = 30ad4fe6b2a6aeed'또는 해당 종속성 중 하나를로드 할 수 없습니다. 시스템이 지정된 파일을 찾을 수 없습니다. "
Jidheesh Rajan

89
서식 dll의 버전이 내 프로젝트에서 .NET 프레임 워크 버전의 "System.Net.Http"와 작동하도록하려면 NuGet 패키지 "Microsoft.AspNet.WebApi.Client"를 추가해야합니다.
Todd H.

27
표준 시스템 어셈블리를 참조 할 때 인터넷의 임의 위치에서 오픈 소스 자료를 다운로드해야 작동하는 이유는 무엇입니까? 의존성을 해결할 수 없다면 왜 컴파일됩니까? 이것은 나에게 끝이 없다!
Neutrino

4
@Neutrino 코드를 직접 작성 하시겠습니까? Microsoft와 다른 곳의 사람들이 무료로 사용할 수있는 코드를 작성했음을 감사해야합니다.
reggaeguitar

4
PM> 설치 패키지 System.Net.Http.Formatting.Extension
Yar

193

PostAsJsonAsync더 이상 System.Net.Http.dll(.NET 4.5.2)에 없습니다. 에 대한 참조를 추가 할 수 System.Net.Http.Formatting.dll있지만 실제로는 이전 버전에 속합니다. TeamCity 빌드 서버에서이 문제에 부딪 쳤는데이 두 가지가 서로 협력하지 않을 것입니다.

또는, 당신은 대체 할 수 PostAsJsonAsync로모그래퍼 PostAsync새 DLL의 한 부분입니다 전화. 바꾸다

var response = client.PostAsJsonAsync("api/AgentCollection", user).Result;

와:

var response = client.PostAsync("api/AgentCollection", new StringContent(
   new JavaScriptSerializer().Serialize(user), Encoding.UTF8, "application/json")).Result;

참고 JavaScriptSerializer네임 스페이스에 있습니다 System.Web.Script.Serialization.

csproj에 어셈블리 참조를 추가해야합니다. System.Web.Extensions.dll

https://code.msdn.microsoft.com/windowsapps/How-to-use-HttpClient-to-b9289836을 참조 하십시오.


7
이것이 답이되어야합니다. 무언가를하는 가장 좋은 방법은 올바른 방법입니다
Alireza

4
이것이 지금까지 가장 좋은 대답입니다. NuGet 패키지 또는 dll을 추가하지 마십시오.
Gökhan Kurt

3
완전히 가장 좋은 답변입니다. 선택한 대답은 최선의 방법이 아닙니다 모두에서 마이크로 소프트가 참조 된 DLL을하지 않는 것이 좋습니다 사실,
Astaar

4
주제를 벗어 났지만 어쨌든 언급하고 싶습니다 . await FooAsync()대신 사용하십시오 FooAsync().Result. 후자는 교착 상태가 될 수 있습니다. stackoverflow.com/q/17248680/2272514 및 허용되는 답변을 참조하십시오 . 세부 사항에 대한 좋은 링크도 있습니다.
Thomas Schreiter

2
"application / json"대신 유형을 사용하려면 MediaTypeNames.Application.Json docs.microsoft.com/en-us/dotnet/api/…를
daviesdoesit

163

누락 된 참조는 System.Net.Http.Formatting.dll입니다. 그러나 더 나은 솔루션은 NuGet 패키지를 추가하여 프로젝트에서 Microsoft.AspNet.WebApi.Client.NET 프레임 워크 버전의 dll 버전과 작동하도록 서식 dll 버전 을 추가하는 것 System.Net.Http입니다.


1
@Yuval-내가 제안한 "솔루션"이 댓글처럼 들렸다는 것을 알게되었습니다. Andreo가 내가 제안한 NuGet 패키지를 작성했습니다.
Todd H.

이것이 저에게 답이었습니다! (내 질문에)
JenonD

34

이미 논의 된 바와 같이이 방법은 .NET 4.5.2 이후에는 더 이상 사용할 수 없습니다. Jeroen K의 답변 을 확장하려면 확장 방법을 만들 수 있습니다.

public static async Task<HttpResponseMessage> PostAsJsonAsync<TModel>(this HttpClient client, string requestUrl, TModel model)
{
    var serializer = new JavaScriptSerializer();
    var json = serializer.Serialize(model);
    var stringContent = new StringContent(json, Encoding.UTF8, "application/json");
    return await client.PostAsync(requestUrl, stringContent);
}

이제 전화를 걸 수 client.PostAsJsonAsync("api/AgentCollection", user)있습니다.


12

소스 제어에서 방금 체크 아웃 한 프로젝트 에서도이 문제가 발생했습니다.

증상은 위에서 설명한 오류와 관련하여 노란색 경고 삼각형입니다 System.Net.Http.Formatting

이 문제를 해결하기 위해 깨진 참조를 제거한 다음 NuGet을 사용하여 최신 버전을 설치했습니다 Microsoft.AspNet.WebApi.Client.


2
효과가있다! Nuget Console로 설치하려면Install-Package Microsoft.AspNet.WebApi.Client
yu yang Jian

4

이 답변이 너무 늦었다는 것을 알고 있습니다. 동일한 문제가 있었고 System.Net.Http.Formatting.Extension여기를 확인한 후 Nuget 을 추가하고 있었고 Nuget이 추가되었지만 System.Net.Http.Formatting.dll참조에 추가되지 않은 것을 발견했습니다.



2

간단한 호출을 위해이 정도의 코드를 작성하는 대신 인터넷을 통해 사용 가능한 래퍼 중 하나를 사용할 수 있습니다.

NuGet에서 사용할 수있는 WebApiClient라는 것을 작성했습니다 ... 확인하십시오!

https://www.nuget.org/packages/WebApiRestService.WebApiClient/


@Andreo 링크 ( webapiclient.azurewebsites.net )는 이제 2017 년 11 월 30 일에 중단되었습니다. NuGet 작업 링크는 nuget.org/packages/WebApiRestService.WebApiClient
Vishwajit G

불행히도 Microsoft는 푸른 구독을 종료했으며 URL은 더 이상 유효하지 않습니다. (
Andreo Romera

2

Blazor에서 놀고 있는데 오류가 발생하면 패키지를 추가해야합니다 Microsoft.AspNetCore.Blazor.HttpClient.


0

주석의 팁 으로 Jeroen의 답변 을 확장하십시오 .

var content = new StringContent(
    JsonConvert.SerializeObject(user), 
    Encoding.UTF8, 
    MediaTypeNames.Application.Json);

var response = await client.PostAsync("api/AgentCollection", content);
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.