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


97

방금 만든 웹 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 클라이언트에서 사용했습니다.

답변:


140

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

솔루션 :에 대한 참조를 추가하십시오 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입니다.

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


7
다른 사람들이 교외를 흔들도록 도와주는 자기 답변!
— granadaCoder 2013 년

그 폴더를 어떻게 얻었습니까? 웹 플랫폼 설치 프로그램을 사용했는데 Program Files에서 해당 폴더를 만들지 않았습니다.
— bladefist

5
참조 추가-> 어셈블리-> 확장. 목록에 없으면 어셈블리 검색 상자로 이동하여 '서식'을 입력합니다. 바라건대 그것은 당신을 위해 더 쉽게 찾을 수 있습니다.
— FrankO

1
업데이트, 내 위치 : C : \ Program Files (x86) \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Packages \ Microsoft.AspNet.WebApi.Client.4.0.30506.0 \ lib \ net40
— PurpleSmurph

6
nuget.org/packages/System.Net.Http.Formatting.Extension- 이것을 사용하지 않을 이유가 있습니까?
— WernerCD

93

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

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


감사. 그것은 비즈니스 관련 코드를 제거하고 Foos로 대체하려는 노력에서 남겨진 실수였습니다.
— Water Cooler v2

이해가 안 돼요. 이미 콘솔 앱 속성에서 .NET 4.0 프레임 워크를 대상으로하고 있습니다. 이 라이브러리 Microsoft.AspNet.WebAPI.Client.dll에 대한 참조를 설정해야합니까? 내 웹 API를 사용하고 잘 작동하는 ASP.NET MVC 프로젝트에서 이러한 참조를 설정하지 않았습니다.
— Water Cooler v2

5
Microsoft.AspNet.WebApi.ClientNuGet 을 설치해야합니다 . 그러면 인터넷에서 최신 버전을 다운로드하고 콘솔 애플리케이션에서 어셈블리를 참조합니다. 이것이 바로 ASP.NET MVC 프로젝트 템플릿이하는 일이며, 이것이 작동하기 위해 아무것도 설치할 필요가없는 이유입니다. 하지만 콘솔 애플리케이션에는 그런 것이 없습니다.
— Darin Dimitrov 2013 년

1
감사. 나는 당신이 말한대로했다. 내 솔루션에 12 개의 프로젝트가 있지만 이상한 이유로 Library Package Manager 콘솔에서 'install-package Microsoft.AspNet.WebApi.Client'라고 말한 후 일반적인 추적을 인쇄 한 다음 'Microsoft.AspNet을 성공적으로 설치했습니다. .WebApi.Client in MyMVCProjectNameAndNotMyConsoleProjectName '. 다음에 콘솔 프로젝트를 선택하고 패키지 관리자 콘솔에 동일한 내용을 입력했습니다. MyMVCProjectName이 이미 Microsoft.AspNet.WebApi.Client를 참조한다고 말했습니다. 혼란 스럽습니다.
— Water Cooler v2

맞아요 저도 요. 처음부터 시작하십시오. 새 콘솔 애플리케이션, NuGet 콘솔을 열고 Install-Package Microsoft.AspNet.WebApi.Client코드를 입력 하고 시도합니다.
— Darin Dimitrov 2013 년

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

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


2
나는 dotnetcore 응용 프로그램을 2.2에서 3.1 최신 버전으로 마이그레이션하고 있었는데이 오류가 발생했습니다. 내 앱에는 이미 System.Net.Http.Formatting.Extension v5.2.3에 대한 참조가 있지만 내 앱이이 오류를 불평하므로 nuget 패키지 Microsoft.AspNet.WebApi를 설치했습니다. . Rikin과 Darin이 제안한 클라이언트와 그 후 문제가 해결되었습니다. 감사합니다
— AKS

12

System.Net.Http.Formatting.dll에 대한 참조를 추가하면 DLL 불일치 문제가 발생할 수 있습니다. 현재 System.Net.Http.Formatting.dll은 Newtonsoft.Json.DLL의 4.5.0.0 버전을 참조하는 것으로 보이지만 최신 버전은 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> 

따라서 System.Net.Http.Formatting.dll에 대한 참조를 추가하는 대체 솔루션은 응답을 문자열로 읽은 다음 JsonConvert.DeserializeObject (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;
      }
}

9

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

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


이것은 나를 위해 그것을 고쳤습니다. -VS2013 사용
— Dan Rayson

당신은 이미 V 5.2.3 내 문제를 해결 설치하고 설치하는 중 Microsoft.AspNet.WebApi.Client 패키지 시도 유엔이있는 경우
— 나빈

-1

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

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

6
2013 년 1 월의 승인 된 답변은 이미 이에 대해 설명하고 있으며 더 많은 정보를 제공합니다. 귀하의 답변도 올바른 형식이 아닙니다.
— user247702
당사 사이트를 사용함과 동시에 당사의 쿠키 정책과 개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.