HttpClient가 PostAsJsonAsync 메소드 C #을 지원하지 않습니다 = System.DateTime.Today; user.RemittanceDate = System.DateTime.Today; user.TotalAmount

웹 응용 프로그램에서 웹 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’가 없습니다. 지시어 또는 어셈블리 참조를 사용합니까?)

보고 조언 해주세요.



답변

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

System.Net.Http.Formatting.dll

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

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


답변

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을 참조 하십시오.


답변

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


답변

이미 논의 된 바와 같이이 방법은 .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)있습니다.


답변

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

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

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


답변

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


답변

프로젝트에 NuGet 패키지를 설치하십시오 : Microsoft.AspNet.WebApi.Client :

Install-Package Microsoft.AspNet.WebApi.Client