programing

HttpClient는 PostAssonAsync 메서드 C#을 지원하지 않습니다.

css3 2023. 3. 26. 11:42

HttpClient는 PostAssonAsync 메서드 C#을 지원하지 않습니다.

웹 어플리케이션에서 웹 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;

에러 메세지가 표시됩니다.

오류: '시스템.Net.Http.HttpClient'에는 'PostAsJsonAsync'에 대한 정의가 없으며 'System' 형식의 첫 번째 인수를 받아들이는 확장 메서드 'PostAsJsonAsync'에 대한 정의가 없습니다.Net.Http.HttpClient'를 찾을 수 있습니다(사용 지시문 또는 어셈블리 참조가 누락되었습니까?).

보고 조언해 주세요.

네, 다음 항목에 대한 참조를 추가해야 합니다.

System.Net.Http.Formatting.dll

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

이를 위한 좋은 방법은 NuGet 패키지를 프로젝트에 추가하는 것입니다.

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포맷 dll 버전이 와 함께 동작하는지 확인합니다.NET 프레임워크 버전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.ExtensionNuget, 여기 저기 확인해보니 Nuget이 추가되었지만System.Net.Http.Formatting.dll했을 뿐입니다.

프로젝트에 NuGet 패키지를 설치합니다.마이크로소프트(MS.AspNet.WebApi.클라이언트:

Install-Package Microsoft.AspNet.WebApi.Client

패키지 「NuGet 2020」에서 수 .System.Net.Http.Json, ,, 품, 품을 해 주십시오System.Text.Json내부적으로

어떤 API가 어디에 있는지 꼭 알고 싶다면 https://apisof.net/을 이용하세요.

만약 당신이 이미 뉴턴소프트를 사용하고 있다면.Json은 다음을 수행합니다.

  // Alternative using WebApi.Client 5.2.7
  ////var response = await Client.PutAsJsonAsync(
  ////    "api/AgentCollection", user
  ////    requestListDto)

  var response = await Client.PostAsync("api/AgentCollection", new StringContent(
    JsonConvert.SerializeObject(user), Encoding.UTF8, "application/json"));

성능은 JavaScriptSerializer보다 우수합니다.여기를 봐주세요.https://www.newtonsoft.com/json/help/html/Introduction.htm

간단한 콜을 발신하기 위해 이 정도의 코드를 쓰는 것이 아니라 인터넷을 통해 이용 가능한 래퍼 중 하나를 사용할 수 있습니다.

WebApiClient라는 NuGet에서 사용할 수 있는 것을 작성했습니다.보세요!

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

하면 Blazor .Microsoft.AspNetCore.Blazor.HttpClient.

Jeroen의 답변을 코멘트 힌트로 확대합니다.

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

var response = await client.PostAsync("api/AgentCollection", content);

저는 많은 시도 끝에 해결책을 찾았습니다.그것은 대체입니다.

HttpClient

와 함께

System.Net.Http.HttpClient

여기 뉴턴소프트를 사용하는 것에 대한 답변에 기초하고 있습니다.Json, 이 도우미 클래스를 만들었습니다.

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

사용 예:

using (var content = new JsonContent(user))
{
    var response = client.PostAsync("api/AgentCollection", content).Result;
}

Blazor 컴포넌트를 사용하고 있는데 이 오류가 발생하면 컴포넌트가 http 클라이언트를 찾을 수 없음을 의미합니다.블레이저 컴포넌트의 맨 위에 있는 이 라인을 사용합니다.

@inject HttpClient Http

프로그램 또는 시작 파일에 이 행이 있는지 확인하십시오.

builder.Services.AddScoped(sp => 
new HttpClient { BaseAddress = new Uri(builder.HostEnvironment.BaseAddress) });

언급URL : https://stackoverflow.com/questions/19158378/httpclient-not-supporting-postasjsonasync-method-c-sharp