“System.Net.Http.HttpContent”不包含“ReadAsAsync”的定义,也没有扩展方法

我制作了一个控制台应用程序来使用我刚制作的Web 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?) 

以下是发生此错误的testing方法。

 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客户端使用它。

经过漫长的斗争,我find了解决办法。

解决scheme:添加对System.Net.Http.Formatting.dll的引用。 此程序集也位于C:\ Program Files \ Microsoft ASP.NET \ ASP.NET MVC 4 \ Assemblies文件夹中。

ReadAsAsync方法是在类System.Net.Http中的名称空间HttpContentExtensions声明的扩展方法。

reflection器来救援!

确保您已经在控制台应用correct NuGet package中安装了correct NuGet package

 <package id="Microsoft.AspNet.WebApi.Client" version="4.0.20710.0" /> 

而且你的目标至less是.NET 4.0。

GetAllFoos ,你的GetAllFoos函数被定义为返回一个IEnumerable<Prospect>而在你的ReadAsAsync方法中,你传递的IEnumerable<Foo>显然是不兼容的types。

Install-Package Microsoft.AspNet.WebApi.Client

在项目经理控制台中选择项目

或者如果你有VS 2012,你可以到包pipe理器控制台,然后键入Install-Package Microsoft.AspNet.WebApi.Client

这会下载最新版本的软件包

添加对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,则还需要添加绑定redirect以避免.NET程序集exception:

 <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的引用的另一种解决scheme是将响应作为string读取,然后使用JsonConvert.DeserializeObject(responseAsString)进行desearalize自己。 完整的方法是:

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

在您的项目中使用本大会参与

 Add a reference to System.Net.Http.Formatting.dll 
  • 如果你无法从何时findassembly参考(右击参考 – >添加需要的assembly)

试试这个包pipe理器控制台
安装包System.Net.Http.Formatting.Extension –版本5.2.3,然后添加通过使用添加引用。