source

'시스템'넷. http.HttpContent'에 'ReadAsync'에 대한 정의가 없고 확장 메서드가 없습니다.

nicesource 2023. 4. 29. 09:27
반응형

'시스템'넷. http.HttpContent'에 'ReadAsync'에 대한 정의가 없고 확장 메서드가 없습니다.

방금 만든 웹 API를 소비하기 위해 콘솔 앱을 만들었습니다.콘솔 앱 코드가 컴파일되지 않습니다.컴파일 오류가 발생합니다.

'System.Net.Http.HttpContent' does not contain a definition for 
'ReadAsAsync' and no extension method 'ReadAsAsync' accepting a 
first argument of type 'System.Net.Http.HttpContent' could be 
found (are you missing a using directive or an assembly reference?)

다음은 이 오류가 발생하는 테스트 방법입니다.

static IEnumerable<Foo> GetAllFoos()
{
  using (HttpClient client = new HttpClient())
  {
    client.DefaultRequestHeaders.Add("appkey", "myapp_key");

    var response = client.GetAsync("http://localhost:57163/api/foo").Result;

    if (response.IsSuccessStatusCode)
      return response.Content.ReadAsAsync<IEnumerable<Foo>>().Result.ToList();
  }

  return null;
}

저는 이 방법을 사용하여 MVC 클라이언트에서 사용했습니다.

오랜 투쟁 끝에 해결책을 찾았습니다.

솔루션:다음에 참조 추가System.Net.Http.Formatting.dll이 어셈블리는 C:\Program Files\Microsoft ASP에서도 사용할 수 있습니다.NET\ASP.NET MVC 4\Assemblys 폴더입니다.

방법ReadAsAsync클래스에서 선언된 확장 메서드입니다.HttpContentExtensions그것은 네임스페이스에 있습니다.System.Net.Http도서관에서.System.Net.Http.Formatting.

반사경이 구조하러 왔습니다!

콘솔 응용 프로그램에 를 설치했는지 확인합니다.

<package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" />

그리고 당신이 적어도 목표로 하고 있다는 것.NET 4.0.

이런 말이 나왔으니깐.GetAllFoos함수는 다음을 반환하도록 정의됩니다.IEnumerable<Prospect>반면에 당신의 경우에는ReadAsAsync당신이 통과하는 방법IEnumerable<Foo>분명히 호환되지 않는 유형입니다.

Install-Package Microsoft.AspNet.WebApi.Client

프로젝트 관리자 콘솔에서 프로젝트 선택

  • 언제부터 어셈블리 참조를 찾을 수 없는 경우(참조 오른쪽 클릭 ->필요한 어셈블리 추가)

패키지 관리자 콘솔을 사용해 보십시오.
설치-패키지 시스템.넷. http.포맷.확장 버전 5.2.3을 선택한 다음 참조 추가를 사용하여 추가합니다.

시스템에 참조를 추가하는 중입니다.넷. http.format.dll을 지정하면 DLL 불일치 문제가 발생할 수 있습니다.지금 당장, 시스템.넷. http.formating.dll은 Newtonsoft 버전 4.5.0.0을 참조하는 것으로 나타납니다.Json.DLL, 최신 버전은 6.0.0.0입니다.즉, 바인딩 리디렉션을 추가하여 을(를) 방지해야 합니다.최신 Newtonsoft NuGet 패키지 또는 DLL을 참조하는 경우 NET 어셈블리 예외:

<dependentAssembly>
   <assemblyIdentity name="Newtonsoft.Json" publicKeyToken="30ad4fe6b2a6aeed" culture="neutral" />
    <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
 </dependentAssembly> 

따라서 시스템에 참조를 추가할 수 있는 대안 솔루션입니다.넷. http.formating.dll은 응답을 문자열로 읽은 다음 JsonConvert를 사용하여 자신을 디스타일화하는 것입니다.개체를 역직렬화합니다(responseAsString).전체 방법은 다음과 같습니다.

public async Task<T> GetHttpResponseContentAsType(string baseUrl, string subUrl)
{
     using (var client = new HttpClient())
     {
         client.BaseAddress = new Uri(baseUrl);
         client.DefaultRequestHeaders.Accept.Clear();
         client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

         HttpResponseMessage response = await client.GetAsync(subUrl);
         response.EnsureSuccessStatusCode();
         var responseAsString = await response.Content.ReadAsStringAsync();
         var responseAsConcreteType = JsonConvert.DeserializeObject<T>(responseAsString);
         return responseAsConcreteType;
      }
}

또는 VS 2012가 있는 경우 패키지 관리자 콘솔로 이동하여 Install-Package Microsoft를 입력할 수 있습니다.AsNet.WebApi.고객

패키지의 최신 버전을 다운로드합니다.

너겟에서 아래 패키지 설치

동일한 문제가 있었지만 제안된 답변이 시스템을 설치하는 데 도움이 되지 않았습니다.넷. http.Json 패키지에서 오류가 제거되었습니다.

프로젝트에서 이 어셈블리 참조 사용

Add a reference to System.Net.Http.Formatting.dll

언급URL : https://stackoverflow.com/questions/14520762/system-net-http-httpcontent-does-not-contain-a-definition-for-readasasync-an

반응형