'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
'IT story' 카테고리의 다른 글
JQuery 또는 JavaScript : 앵커 태그 하이퍼 링크를 클릭하는 동안 Shift 키를 눌렀는지 확인하는 방법은 무엇입니까? (0) | 2020.09.17 |
---|---|
jQuery UI datepicker에서 날짜를 얻는 방법 (0) | 2020.09.17 |
명령 줄을 사용하여 Nupkg 파일 추출 (0) | 2020.09.17 |
카테고리에 대한 신속한 클래스를 만드는 방법은 무엇입니까? (0) | 2020.09.17 |
인터페이스 빌더에서 생성 된 앞 / 뒤 요소에 프로그래밍 방식으로 전송 (0) | 2020.09.17 |