如何使用HttpClient发布数据?

use*_*840 61 c# windows-phone-7 windows-phone dotnet-httpclient windows-phone-8

我有来自Nuget的这个 HttpClient.

当我想获取数据时,我这样做:

var response = await httpClient.GetAsync(url);
var data = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

但问题是我不知道如何发布数据?我必须发送一个帖子请求并在其中发送这些值:comment="hello world"questionId = 1.这些可以是一个类的属性,我不知道.

更新我不知道如何将这些值添加到HttpContentpost方法需要它.httClient.Post(string, HttpContent);

Ica*_*ato 134

你需要使用:

await client.PostAsync(uri, content);
Run Code Online (Sandbox Code Playgroud)

像这样的东西:

var comment = "hello world";
var questionId = 1;

var formContent = new FormUrlEncodedContent(new[]
{
    new KeyValuePair<string, string>("comment", comment), 
    new KeyValuePair<string, string>("questionId", questionId) 
});

var myHttpClient = new HttpClient();
var response = await myHttpClient.PostAsync(uri.ToString(), formContent);
Run Code Online (Sandbox Code Playgroud)

如果您需要在发布后获得响应,您应该使用:

var stringContent = await response.Content.ReadAsStringAsync();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你 ;)

  • 或更短的字典文字:`var formContent = new FormUrlEncodedContent(new Dictionary <string,string> {{"comment",comment},{"questionId",questionId}});` (8认同)

小智 5

尝试使用这个:

using (var handler = new HttpClientHandler() { CookieContainer = new CookieContainer() })
{
    using (var client = new HttpClient(handler) { BaseAddress = new Uri("site.com") })
    {
        //add parameters on request
        var body = new List<KeyValuePair<string, string>>
        {
            new KeyValuePair<string, string>("test", "test"),
            new KeyValuePair<string, string>("test1", "test1")
        };

        HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "site.com");

        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/x-www-form-urlencoded; charset=UTF-8"));
        client.DefaultRequestHeaders.Add("Upgrade-Insecure-Requests", "1");
        client.DefaultRequestHeaders.Add("X-Requested-With", "XMLHttpRequest");
        client.DefaultRequestHeaders.Add("X-MicrosoftAjax", "Delta=true");
        //client.DefaultRequestHeaders.Add("Accept", "*/*");

        client.Timeout = TimeSpan.FromMilliseconds(10000);

        var res = await client.PostAsync("", new FormUrlEncodedContent(body));

        if (res.IsSuccessStatusCode)
        {
            var exec = await res.Content.ReadAsStringAsync();
            Console.WriteLine(exec);
        }                    
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 您可能想使用 MultipartFormDataContent 而不是 FormUrlEncodedContent (这取决于您的服务器的期望) (3认同)