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.Extension
Nuget, 여기 저기 확인해보니 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
.
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
'programing' 카테고리의 다른 글
프로젝터 콘솔 로그 (0) | 2023.03.31 |
---|---|
경고: preg_replace(): 알 수 없는 수식자 (0) | 2023.03.31 |
Respect Js: Uncapted (in promise) SyntaxError:위치 0의 JSON에 예기치 않은 토큰이 있습니다. (0) | 2023.03.26 |
레일이 jQuery에서 JSON을 올바르게 디코딩하지 않음(배열이 정수 키를 가진 해시가 됨) (0) | 2023.03.26 |
Spring과의 통합 테스트 중 외부 서버 모의 테스트 (0) | 2023.03.26 |