webapi readasasync not net method found description aspnet asp.net .net asp.net-mvc asp.net-web-api

asp.net - readasasync - system web http nuget



''System.Net.Http.HttpContent'' no contiene una definición para ''ReadAsAsync'' y ningún método de extensión (6)

Hice una aplicación de consola para consumir una API web que acabo de crear. El código de la aplicación de la consola no se compila. Me da el error de compilación:

''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?)

Aquí hay un método de prueba en el que se produce este error.

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

He usado este método y lo he consumido de un cliente de MVC.


Agregar una referencia a System.Net.Http.Formatting.dll puede causar problemas de desajuste de DLL. En este momento, System.Net.Http.Formatting.dll parece hacer referencia a la versión 4.5.0.0 de Newtonsoft.Json.DLL, mientras que la última versión es 6.0.0.0. Esto significa que también deberá agregar una redirección de enlace para evitar una excepción de ensamblado .NET si hace referencia al último paquete de Newtonsoft NuGet o 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>

Por lo tanto, una solución alternativa para agregar una referencia a System.Net.Http.Formatting.dll es leer la respuesta como una cadena y luego desalientarse con JsonConvert.DeserializeObject (responseAsString). El método completo sería:

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


Asegúrese de haber instalado el correct NuGet package en su aplicación de consola:

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

y que tiene como objetivo al menos .NET 4.0.

Dicho esto, su función GetAllFoos está definida para devolver un IEnumerable<Prospect> mientras que en su método ReadAsAsync está pasando IEnumerable<Foo> que obviamente no son tipos compatibles.

Install-Package Microsoft.AspNet.WebApi.Client


Después de una larga lucha, encontré la solución.

Solución: agregue una referencia a System.Net.Http.Formatting.dll . Este ensamblado también está disponible en la carpeta C: / Archivos de programa / Microsoft ASP.NET / ASP.NET MVC 4 / Assemblies .

El método ReadAsAsync es un método de extensión declarado en la clase HttpContentExtensions , que se encuentra en el espacio de nombres System.Net.Http en la biblioteca System.Net.Http.Formatting .

Reflector vino a rescatar!


o si tiene VS 2012, puede ir a la consola del administrador de paquetes y escribir Install-Package Microsoft.AspNet.WebApi.Client

Esto descargaría la última versión del paquete


UTILIZA este Referance de Montaje en tu Proyecto

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


  • si no puede encontrar la referencia de ensamblaje desde cuándo (haga clic con el botón derecho en la referencia -> agregue el ensamblaje requerido)

prueba esta consola del administrador de paquetes
Install-Package System.Net.Http.Formatting.Extension -Version 5.2.3 y luego agregar usando add reference.