Luego de de una prolongada selección de información dimos con la solución esta escollo que pueden tener muchos lectores. Te ofrecemos la solución y esperamos que te sea de gran apoyo.
Solución:
Intente usar ReadAsStringAsync() en su lugar.
var foo = resp.Content.ReadAsStringAsync().Result;
la razon por la cual ReadAsAsync
no funciona es porque ReadAsAsync<>
intentará usar uno de los predeterminados MediaTypeFormatter
(es decir JsonMediaTypeFormatter
, XmlMediaTypeFormatter
…) para leer el contenido con content-type
de text/plain
. Sin embargo, ninguno de los formateadores predeterminados puede leer el text/plain
(solo pueden leer application/json
, application/xml
etc).
Mediante el uso ReadAsStringAsync()
el contenido se leerá como string independientemente del tipo de contenido.
O simplemente puedes crear el tuyo propio. MediaTypeFormatter
. Yo uso esto para text/html
. si agregas text/plain
a él, funcionará para usted también:
public class TextMediaTypeFormatter : MediaTypeFormatter
public TextMediaTypeFormatter()
SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
public override Task
Finalmente tienes que asignar esto a la HttpMethodContext.ResponseFormatter
propiedad.
Sé que esta es una pregunta anterior, pero sentí que la respuesta de t3chb0t me llevó al mejor camino y sentí ganas de compartir. Ni siquiera necesita ir tan lejos como para implementar todos los métodos del formateador. Hice lo siguiente para el tipo de contenido “application/vnd.api+json” devuelto por una API que estaba usando:
public class VndApiJsonMediaTypeFormatter : JsonMediaTypeFormatter
public VndApiJsonMediaTypeFormatter()
SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/vnd.api+json"));
Que se puede usar simplemente como lo siguiente:
HttpClient httpClient = new HttpClient("http://api.someaddress.com/");
HttpResponseMessage response = await httpClient.GetAsync("person");
List formatters = new List();
formatters.Add(new System.Net.Http.Formatting.JsonMediaTypeFormatter());
formatters.Add(new VndApiJsonMediaTypeFormatter());
var responseObject = await response.Content.ReadAsAsync(formatters);
Súper simple y funciona exactamente como esperaba.
Si haces scroll puedes encontrar las notas de otros sys admins, tú igualmente tienes la libertad de mostrar el tuyo si dominas el tema.