IT story

'System.Net.Http.HttpContent'에 'ReadAsAsync'에 대한 정의가없고 확장 메서드가 없습니다.

hot-time 2020. 9. 17. 18:57
반응형

'System.Net.Http.HttpContent'에 'ReadAsAsync'에 대한 정의가없고 확장 메서드가 없습니다.


방금 만든 웹 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 \ Assemblies 폴더 에서도 사용할 수 있습니다 .

메서드 ReadAsAsync라이브러리 HttpContentExtensions의 네임 스페이스 System.Net.Http에있는 클래스에서 선언 된 확장 메서드 System.Net.Http.Formatting입니다.

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


correct NuGet package콘솔 애플리케이션에를 설치했는지 확인하십시오 .

<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

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


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

패키지 관리자 콘솔
Install-Package System.Net.Http.Formatting.Extension -Version 5.2.3을 시도한 다음 add reference를 사용하여 추가하십시오.


Adding a reference to System.Net.Http.Formatting.dll may cause DLL mismatch issues. Right now, System.Net.Http.Formatting.dll appears to reference version 4.5.0.0 of Newtonsoft.Json.DLL, whereas the latest version is 6.0.0.0. That means you'll need to also add a binding redirect to avoid a .NET Assembly exception if you reference the latest Newtonsoft NuGet package or DLL:

<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> 

So an alternative solution to adding a reference to System.Net.Http.Formatting.dll is to read the response as a string and then desearalize yourself with JsonConvert.DeserializeObject(responseAsString). The full method would be:

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;
      }
}

or if you have VS 2012 you can goto the package manager console and type Install-Package Microsoft.AspNet.WebApi.Client

This would download the latest version of the package


USE This Assembly Referance in your Project

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

반응형