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;
}
The PostAsync
mengambil parameter lain bahwa kebutuhan untuk menjadi HttpContent
.
Bagaimana cara mengatur HttpContent
? Tidak ada dokumentasi di mana pun yang berfungsi untuk Windows Phone 8.
Jika saya melakukannya GetAsync
, itu akan berhasil! tetapi perlu POST dengan konten key = "bla", something = "yay"
// EDIT
Terima kasih banyak atas jawabannya ... Ini bekerja dengan baik, tetapi masih sedikit yang tidak yakin di sini:
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;
}
Data "test = something" Saya berasumsi akan mengambil sisi api sebagai data post "test", ternyata tidak. Pada masalah lain, saya mungkin perlu memposting seluruh objek / array melalui data posting, jadi saya menganggap json akan lebih baik untuk melakukannya. Adakah pemikiran tentang bagaimana saya mendapatkan data posting?
Mungkin sesuatu seperti:
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
sumber
Jawaban:
Ini dijawab dalam beberapa jawaban untuk Tidak dapat menemukan cara menggunakan HttpContent serta dalam posting blog ini .
Singkatnya, Anda tidak dapat langsung membuat instance
HttpContent
karena ini adalah kelas abstrak . Anda perlu menggunakan salah satu kelas yang berasal dari itu tergantung pada kebutuhan Anda. Kemungkinan besarStringContent
, yang memungkinkan Anda mengatur nilai string dari respons, pengodean, dan jenis media dalam konstruktor. Lihat: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspxsumber
Untuk menambah jawaban Preston, berikut adalah daftar lengkap dari
HttpContent
kelas turunan yang tersedia di perpustakaan standar:Kredit : https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/
Ada juga yang seharusnya
ObjectContent
tetapi saya tidak dapat menemukannyaASP.NET Core
.Tentu saja, Anda dapat melewati
HttpContent
semuanya denganMicrosoft.AspNet.WebApi.Client
ekstensi (Anda harus melakukan impor untuk membuatnya berfungsi di ASP.NET Core untuk saat ini: https://github.com/aspnet/Home/issues/1558 ) dan kemudian Anda dapat melakukan hal-hal seperti:sumber