Veo en un montón de ejemplos en la web con el nuevo HttpClient objeto (como parte de la nueva API de Web) que no debe ser HttpContent.ReadAsAsync<T> método. Sin embargo, MSDN no menciona este método, ni IntelliSense encontrar.

A dónde se fue, y ¿cómo puedo evitar esto?

6 Comentarios

  1. 385

    Parece que es un método de extensión (en el Sistema.Net.Http.El formato):

    HttpContentExtensions Clase

    Actualización:

    PM> instalar el paquete de Microsoft.AspNet.WebApi.Cliente

    De acuerdo a la Sistema.Net.Http.Formato paquete de NuGet página, el System.Net.Http.Formatting paquete de legado y en su lugar puede ser encontrado en el Microsoft.AspNet.WebApi.Client paquete disponible en NuGet aquí.

    • Esto ha sido desaprobado en el último cliente Nugets? No se puede encontrar ahora (que solía ser capaz de).
    • Bien podría ser. .NET4.5 añadido un montón de cosas nuevas en cuanto a async/tareas (la espera, etc), por lo que estas extensiones pueden ya no ser necesario. Me gustaría tal vez echar un vistazo aquí, por ejemplo : msdn.microsoft.com/en-us/library/…
    • Me puede conseguir el mismo comportamiento con ReadAsAsync y la especificación de un JSON formatter, pero era un atajo muy útil.
    • He actualizado la respuesta. En la media hora System.Net.Http.Formatting parece que se trasladó a nuget.org/packages/Microsoft.AspNet.WebApi.Client el paquete.
    • He intentado por varias horas y nunca llegué a este trabajo. El uso de JavaScriptSerializer lugar.
    • Estoy creando un ASP.NET MVC 5 aplicación puedo usar ese paquete?
    • Sugerimos que pregunte que como una pregunta nueva.
    • Así que es cierto que el método de la pregunta original, HttpContent.ReadAsAsync<T>, no es de Microsoft.AspNet.WebApi.Cliente? ¿Cuál es la sugerencia de reemplazo?
    • Veo la sugerencia de sustituir en la otra respuesta.
    • ¿Con este trabajo .NET Core 2.0?
    • Bastante seguro de que no. El WebAPI.Paquete de cliente requiere .NET 4.5. Creo que el viejo HttpContentExtensions se para .NET 4.0
    • No funciona. Yo estoy con .NET 4.6.1

  2. 64

    Tengo el mismo problema, así que simplemente me string JSON y deserializar a mi clase:

    HttpResponseMessage response = await client.GetAsync("Products");
    //get data as Json string 
    string data = await response.Content.ReadAsStringAsync();
    //use JavaScriptSerializer from System.Web.Script.Serialization
    JavaScriptSerializer JSserializer = new JavaScriptSerializer();
    //deserialize to your class
    products = JSserializer.Deserialize<List<Product>>(data);
    • Aparte del hecho de que esto no responde a la pregunta, ¿por qué esta votó? ¿No es una alternativa razonable a ReadAsAsync?
    • Claro que lo es! +1!
    • probablemente porque no has contestado a la pregunta de ¿a donde el método de extensión ir. La escritura de su propia es una mala solución
    • No es necesariamente una mala solución, es localizada y por lo tanto no es probable que se rompe en el futuro de nuget actualizaciones etc. Yo soy todo para él.
    • Esto supone que la respuesta tiene un JSON tipo de contenido.
    • Creo que ReadAsStringAsync es una mala idea, utilizando ReadAsStreamAsync es la mejor elección en la solución que no es una respuesta a la pregunta a todos 🙂

  3. 24

    Si usted ya está usando Newtonsoft.Json y no quieres instalar Microsoft.AspNet.WebApi.Client:

     var myInstance = JsonConvert.DeserializeObject<MyClass>(
       await response.Content.ReadAsStringAsync());
  4. 4

    Simplemente haga clic derecho en el proyecto vaya a Administrar Paquetes de NuGet de búsqueda de Microsoft.AspNet.WebApi.La instalación del cliente y usted tendrá acceso para el método de extensión.

    • ¿Esto añade nada a la ya aceptada respuesta?
    • sí, ellos se siguen quejando, así que..
    • Que se queja acerca de qué?
  5. 4

    Puede escribir extensión método:

    public static async Task<Tout> ReadAsAsync<Tout>(this System.Net.Http.HttpContent content) {
        return Newtonsoft.Json.JsonConvert.DeserializeObject<Tout>(await content.ReadAsStringAsync());
    }
    • Es lo que acabé haciendo – no me voy a arrastrar a toda una DLL para un 2-método de línea.
  6. 0

    Que golpeó a esto un par de veces y seguido de un montón de sugerencias, si no se encuentra disponible después de instalar el NuGet de Microsoft.AspNet.WebApi.Cliente agregar manualmente una referencia de la carpeta de paquetes en la solución:

    \Microsoft.AspNet.WebApi.Client.5.2.6\lib\net45\System.Net.Http.Formatting.dll

    Y no entrar en la trampa de la adición de mayores referencias a la System.Net.Http.Formatting.dll NuGet

Dejar respuesta

Please enter your comment!
Please enter your name here