public static async Task<string> GetData(string url, string data)
{
UriBuilder fullUri = new UriBuilder(url);
if (!string.IsNullOrEmpty(data))
fullUri.Query = data;
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.PostAsync(new Uri(url), /*expects HttpContent*/);
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
El PostAsync
toma otro parámetro que debe ser HttpContent
.
¿Cómo configuro un HttpContent
? No hay documentación en ningún lugar que funcione para Windows Phone 8.
Si lo hago GetAsync
, ¡funciona muy bien! pero debe ser POST con el contenido de key = "bla", something = "yay"
//EDITAR
Muchas gracias por la respuesta ... Esto funciona bien, pero todavía algunas dudas aquí:
public static async Task<string> GetData(string url, string data)
{
data = "test=something";
HttpClient client = new HttpClient();
StringContent queryString = new StringContent(data);
HttpResponseMessage response = await client.PostAsync(new Uri(url), queryString );
//response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
response.EnsureSuccessStatusCode();
string responseBody = await response.Content.ReadAsStringAsync();
return responseBody;
}
Supuse que la "prueba = algo" de datos se recogería en el lado de la API como "prueba" de datos posteriores, evidentemente no. En otro asunto, es posible que necesite publicar objetos / matrices completos a través de datos de publicación, por lo que supongo que json será lo mejor. ¿Alguna idea sobre cómo obtengo los datos de publicación?
Quizás algo como:
class SomeSubData
{
public string line1 { get; set; }
public string line2 { get; set; }
}
class PostData
{
public string test { get; set; }
public SomeSubData lines { get; set; }
}
PostData data = new PostData {
test = "something",
lines = new SomeSubData {
line1 = "a line",
line2 = "a second line"
}
}
StringContent queryString = new StringContent(data); // But obviously that won't work
c#
dotnet-httpclient
httpcontent
Jimmyt1988
fuente
fuente
Respuestas:
Esto se responde en algunas de las respuestas a No se puede encontrar cómo usar HttpContent , así como en esta publicación de blog .
En resumen, no puede configurar directamente una instancia de
HttpContent
porque es una clase abstracta . Debe usar una de las clases derivadas de ella según su necesidad. Lo más probable esStringContent
que le permite establecer el valor de cadena de la respuesta, la codificación y el tipo de medio en el constructor. Ver: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspxfuente
Para agregar a la respuesta de Preston, aquí está la lista completa de las
HttpContent
clases derivadas disponibles en la biblioteca estándar:Crédito : https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/
También hay un supuesto,
ObjectContent
pero no pude encontrarloASP.NET Core
.Por supuesto, puede omitir
HttpContent
todo junto conMicrosoft.AspNet.WebApi.Client
extensiones (tendrá que hacer una importación para que funcione en ASP.NET Core por ahora: https://github.com/aspnet/Home/issues/1558 ) y luego puedes hacer cosas como:fuente