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;
}
Das PostAsync
nimmt einen anderen Parameter, der sein muss HttpContent
.
Wie richte ich ein ein HttpContent
? Es gibt nirgendwo eine Dokumentation, die für Windows Phone 8 funktioniert.
Wenn ich das tue GetAsync
, funktioniert es großartig! aber es muss POST mit dem Inhalt von key = "bla", etwas = "yay" sein.
//BEARBEITEN
Vielen Dank für die Antwort ... Das funktioniert gut, aber hier noch ein paar Unsicherheiten:
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;
}
Die Daten "Test = etwas", von denen ich angenommen habe, dass sie auf der API-Seite als Post-Daten "Test" aufgenommen werden, sind dies offensichtlich nicht. In einem anderen Fall muss ich möglicherweise ganze Objekte / Arrays über Post-Daten veröffentlichen, daher gehe ich davon aus, dass json dies am besten tut. Irgendwelche Gedanken darüber, wie ich Post-Daten durch bekomme?
Vielleicht so etwas wie:
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
quelle
Antworten:
Dies wird in einigen Antworten auf Kann nicht finden, wie man HttpContent verwendet , sowie in diesem Blog-Beitrag beantwortet .
Zusammenfassend kann eine Instanz von nicht direkt eingerichtet werden,
HttpContent
da es sich um eine abstrakte Klasse handelt . Sie müssen je nach Bedarf eine der daraus abgeleiteten Klassen verwenden. HöchstwahrscheinlichStringContent
können Sie damit den Zeichenfolgenwert der Antwort, die Codierung und den Medientyp im Konstruktor festlegen. Siehe: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspxquelle
Um Prestons Antwort zu ergänzen, finden Sie hier die vollständige Liste der
HttpContent
abgeleiteten Klassen, die in der Standardbibliothek verfügbar sind:Bildnachweis : https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/
Es gibt auch eine angebliche,
ObjectContent
aber ich konnte es nicht findenASP.NET Core
.Natürlich können Sie das Ganze
HttpContent
zusammen mitMicrosoft.AspNet.WebApi.Client
Erweiterungen überspringen (Sie müssen einen Import durchführen, damit es vorerst in ASP.NET Core funktioniert: https://github.com/aspnet/Home/issues/1558 ) und dann können Sie Dinge tun wie:quelle