如何为我的HttpClient PostAsync第二个参数设置HttpContent?

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; } 

PostAsync需要另一个需要HttpContent参数。

我如何设置一个HttpContent ? 没有任何文档适用于Windows Phone 8。

如果我做GetAsync ,它工作得很好! 但是它需要POST的内容为key =“bla”,something =“yay”

//编辑

非常感谢答案…这很好,但在这里还是有一些不确定的地方:

  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方面作为发布数据“testing”来提取,显然它不会。 另一方面,我可能需要通过发布数据发布整个对象/数组,所以我认为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 

这在一些答案中得到了解答。在这个博客文章中 找不到如何使用HttpContent 。

总之,你不能直接设置一个HttpContent的实例,因为它是一个抽象类 。 你需要根据你的需要使用它派生的类。 最有可能的是StringContent ,它允许您在构造函数中设置响应的string值,编码和媒体types。 请参阅: http : //msdn.microsoft.com/zh-CN/library/system.net.http.stringcontent.aspx

要添加到Preston的答案,这里是标准库中可用的HttpContent派生类的完整列表:

信用: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 Corefind它。

当然,你可以用Microsoft.AspNet.WebApi.Client扩展来跳过整个HttpContent事情(你现在必须做一个导入来使它在ASP.NET Core中工作: https : //github.com / aspnet / Home / issues / 1558 ),然后你可以做这样的事情:

 var response = await client.PostAsJsonAsync("AddNewArticle", new Post { Title = "New Article Title", Body = "New Article Body" });