C# 如何使用HttpClient发布数据?

C# 如何使用HttpClient发布数据?,c#,windows-phone-7,windows-phone-8,windows-phone,dotnet-httpclient,C#,Windows Phone 7,Windows Phone 8,Windows Phone,Dotnet Httpclient,我从Nuget获得了HttpClient 当我想获取数据时,我会这样做: var response = await httpClient.GetAsync(url); var data = await response.Content.ReadAsStringAsync(); 但问题是我不知道如何发布数据? 我必须发送一个post请求并在其中发送以下值:comment=“hello world”和questionId=1。这些可以是类的属性,我不知道 Update我不知道如何将这些值添加到Ht

我从Nuget获得了HttpClient

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

var response = await httpClient.GetAsync(url);
var data = await response.Content.ReadAsStringAsync();
但问题是我不知道如何发布数据? 我必须发送一个post请求并在其中发送以下值:
comment=“hello world”
questionId=1
。这些可以是类的属性,我不知道

Update我不知道如何将这些值添加到
HttpContent
中,因为post方法需要它<代码>httClient.Post(字符串,HttpContent)

您需要使用:

await client.PostAsync(uri, content);
诸如此类:

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

希望有帮助;)

使用
UploadStringAsync
方法:

WebClient webClient = new WebClient();
webClient.UploadStringCompleted += (s, e) =>
{
    if (e.Error != null)
    {
        //handle your error here
    }
    else
    {
        //post was successful, so do what you need to do here
    }
};

webClient.UploadStringAsync(new Uri(yourUri), UriKind.Absolute), "POST", yourParameters);     
尝试使用以下方法:

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);
        }                    
    }
}
使用(var handler=new-HttpClientHandler(){CookieContainer=new-CookieContainer()})
{
使用(var client=newhttpclient(handler){BaseAddress=newuri(“site.com”)})
{
//根据请求添加参数
var body=新列表
{
新的KeyValuePair(“测试”、“测试”),
新的KeyValuePair(“test1”、“test1”)
};
HttpRequestMessage请求=新的HttpRequestMessage(HttpMethod.Post,“site.com”);
client.DefaultRequestHeaders.Accept.Add(新的MediaTypeWithQualityHeaderValue(“application/x-www-form-urlencoded;charset=UTF-8”);
client.DefaultRequestHeaders.Add(“升级不安全请求”,“1”);
client.DefaultRequestHeaders.Add(“X-Requested-With”,“XMLHttpRequest”);
client.DefaultRequestHeaders.Add(“X-MicrosoftAjax”,“Delta=true”);
//client.DefaultRequestHeaders.Add(“接受”,“*/*”);
client.Timeout=TimeSpan.From毫秒(10000);
var res=await client.PostAsync(“,新FormUrlEncodedContent(body));
如果(res.IsSuccessStatusCode)
{
var exec=await res.Content.ReadAsStringAsync();
控制台写入线(exec);
}                    
}
}

您尝试过使用Post方法吗?您应该按照文档中的说明在您的Post中发送什么内容(如果您使用的是API)。然后,只需填写一个HttpContent并使用你尝试过吗?@Patrick谢谢,我已经更新了我的问题,顺便说一句,在发布你的问题10分钟后,用“没人能帮忙吗?”发表评论,一张笑脸可能不会鼓励其他越狱者更快地帮助你。如果你没有找到任何人回答你的问题,你可能想看看你的问题,看看你能做些什么来改进它,提供更多关于你尝试了什么的信息,而不是期望其他人猜测你知道什么。如果有人想用HttpClient上传文件-谢谢,但是我认为这个
HttpClient
WebClient
好。更简单更干净。是吗?啊,是的,我太习惯网络客户端了,当我读这个问题的时候,我就想到了。到目前为止,我还没有使用HttpClient。很抱歉响应是
不可处理的条目
。也许我在其他地方或更短的字典文本中有一个错误:
var formContent=new FormUrlEncodedContent(new dictionary{{“comment”,comment},{“questionId”,questionId})您可能希望使用MultipartFormDataContent而不是FormUrlEncodedContent(这取决于您的服务器期望的内容)
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);
        }                    
    }
}