Как настроить 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
701   2  

2 ответов:

это ответ в некоторых ответах на не могу найти как использовать HttpContent как и в этом блоге.

таким образом, вы не можете напрямую настроить экземпляр HttpContent потому что это абстрактный класс. Вы должны использовать один классы, полученные из него в зависимости от ваших потребностей. Скорее всего,StringContent, что позволяет задать строковое значение ответа, кодировку и тип носителя в конструкторе. Видеть: http://msdn.microsoft.com/en-us/library/system.net.http.stringcontent.aspx

чтобы добавить к ответу Престона, вот полный список HttpContent производные классы, доступные в стандартной библиотеке:

Credit: https://pfelix.wordpress.com/2012/01/16/the-new-system-net-http-classes-message-content/

кредит: 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

    Ничего не найдено.