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;
}
Le PostAsync
prend un autre paramètre qui doit être HttpContent
.
Comment configurer un HttpContent
? Il n'y a aucune documentation qui fonctionne pour Windows Phone 8.
Si je le fais GetAsync
, cela fonctionne très bien! mais il doit être POST avec le contenu de key = "bla", something = "yay"
//ÉDITER
Merci beaucoup pour la réponse ... Cela fonctionne bien, mais encore quelques incertitudes ici:
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;
}
Les données "test = quelque chose" que je supposais remonteraient du côté de l'api en tant que "données" post-test, ce n'est évidemment pas le cas. Sur un autre sujet, je devrai peut-être publier des objets / tableaux entiers via les données de publication, donc je suppose que json sera le mieux. Avez-vous des idées sur la façon dont je transmets les données des publications?
Peut-être quelque chose comme:
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
la source
Réponses:
Ceci est répondu dans certaines des réponses à Impossible de trouver comment utiliser HttpContent ainsi que dans cet article de blog .
En résumé, vous ne pouvez pas configurer directement une instance de
HttpContent
car il s'agit d'une classe abstraite . Vous devez utiliser l'une des classes qui en dérivent en fonction de vos besoins. Très probablementStringContent
, ce qui vous permet de définir la valeur de chaîne de la réponse, l'encodage et le type de média dans le constructeur. Voir: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspxla source
Pour compléter la réponse de Preston, voici la liste complète des
HttpContent
classes dérivées disponibles dans la bibliothèque standard:Crédit : https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/
Il y a aussi un supposé
ObjectContent
mais je n'ai pas pu le trouverASP.NET Core
.Bien sûr, vous pouvez ignorer le tout
HttpContent
avec desMicrosoft.AspNet.WebApi.Client
extensions (vous devrez faire une importation pour le faire fonctionner dans ASP.NET Core pour l'instant: https://github.com/aspnet/Home/issues/1558 ) et ensuite vous pouvez faire des choses comme:la source