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