Как настроить HttpContent для моего второго параметра HttpClient PostAsync?
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 принимает другой параметр, который должен быть HttpContent.
как мне настроить HttpContent? Там нет документации нигде, что работает для Windows Phone 8.
если я это сделаю GetAsync, он отлично работает! но это должен быть пост с содержанием key= "bla", something= "yay"
/ / EDIT
Спасибо за ответ... Это хорошо работает, но все же несколько unsures здесь:
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;
}
данные "test=something "я предположил, что возьму на стороне api как post data" test", очевидно, это не так. С другой стороны, мне может потребоваться опубликовать целые объекты / массивы через post data, поэтому я предполагаю, что json будет лучше всего это сделать. Любой мысли о том, как я получаю данные через?
возможно, что-то вроде:
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
2 ответов:
это ответ в некоторых ответах на не могу найти как использовать HttpContent как и в этом блоге.
таким образом, вы не можете напрямую настроить экземпляр
HttpContentпотому что это абстрактный класс. Вы должны использовать один классы, полученные из него в зависимости от ваших потребностей. Скорее всего,StringContent, что позволяет задать строковое значение ответа, кодировку и тип носителя в конструкторе. Видеть: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspx
чтобы добавить к ответу Престона, вот полный список
HttpContentпроизводные классы, доступные в стандартной библиотеке:кредит: https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/
есть также предполагаемый
ObjectContentно я не смог найти его вASP.NET Core.конечно, вы можете пропустить весь
HttpContentдело все вместе сMicrosoft.AspNet.WebApi.Clientрасширения (вам нужно будет сделать импорт, чтобы заставить его работать ASP.NET ядро на данный момент:https://github.com/aspnet/Home/issues/1558) и тогда вы можете делать такие вещи, как:var response = await client.PostAsJsonAsync("AddNewArticle", new Post { Title = "New Article Title", Body = "New Article Body" });

Comments