'시스템'넷. 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
'source' 카테고리의 다른 글
SQLite 데이터베이스에 대한 테이블의 열 목록을 가져오려면 어떻게 해야 합니까? (0) | 2023.04.29 |
---|---|
원하지 않는 이상한 Xcode 로그 숨기기 (0) | 2023.04.29 |
mongodb의 배열에 있는 모든 요소에서 필드 제거 (0) | 2023.04.29 |
셀(1,1)을 "A1"로 변환하거나 그 반대로 변환합니다. (0) | 2023.04.29 |
HTTP 핸들러 대 HTTP 모듈 (0) | 2023.04.29 |