使用C#httpclient和formencoded参数和标题发布

使用C#httpclient和formencoded参数和标题发布,c#,post,async-await,dotnet-httpclient,C#,Post,Async Await,Dotnet Httpclient,我正在寻找一个使用.net HttpClient发布参数和添加标题的简单示例。这在RestSharp中非常简单,但到目前为止,我看不到一个明确的方法如何使用HttpClient来实现这一点。如果您想修改每个请求的请求头,那么最简单的方法就是设置DefaultRequestHeaders属性。但是,如果您真的只想更改特定请求的请求头,则需要使用SendAsync方法并向其传递一条HttpRequestMessage [Fact] public async Task Post_a_form_and_

我正在寻找一个使用.net HttpClient发布参数和添加标题的简单示例。这在RestSharp中非常简单,但到目前为止,我看不到一个明确的方法如何使用HttpClient来实现这一点。

如果您想修改每个请求的请求头,那么最简单的方法就是设置DefaultRequestHeaders属性。但是,如果您真的只想更改特定请求的请求头,则需要使用
SendAsync
方法并向其传递一条HttpRequestMessage

[Fact]
public async Task Post_a_form_and_change_some_headers()
{

    var client = new HttpClient() { BaseAddress = _BaseAddress };

    var values = new Dictionary<string, string>()
    {
        {"Id", "6"},
        {"Name", "Skis"},
        {"Price", "100"},
        {"Category", "Sports"}
    };
    var content = new FormUrlEncodedContent(values);

    var request = new HttpRequestMessage()
    {
        RequestUri = new Uri("devnull",UriKind.Relative),
        Method = HttpMethod.Post,
        Content = content
    };
    request.Headers.ExpectContinue = false;
    request.Headers.Add("custom-header","a header value");

    var response = await client.SendAsync(request);

    response.EnsureSuccessStatusCode();
}
[事实]
公共异步任务Post\u a\u form\u和\u change\u某些\u头()
{
var client=newhttpclient(){BaseAddress=\u BaseAddress};
var values=newdictionary()
{
{“Id”,“6”},
{“名字”,“滑雪板”},
{“价格”,“100”},
{“类别”、“运动”}
};
var内容=新的FormUrlEncodedContent(值);
var request=newhttprequestmessage()
{
RequestUri=新Uri(“devnull”,UriKind.Relative),
方法=HttpMethod.Post,
内容=内容
};
request.Headers.ExpectContinue=false;
添加(“自定义头”、“头值”);
var response=wait client.sendaync(请求);
response.EnsureSuccessStatusCode();
}

如果要修改每个请求的请求头,最简单的方法是设置DefaultRequestHeaders属性。但是,如果您真的只想更改特定请求的请求头,则需要使用
SendAsync
方法并向其传递一条HttpRequestMessage

[Fact]
public async Task Post_a_form_and_change_some_headers()
{

    var client = new HttpClient() { BaseAddress = _BaseAddress };

    var values = new Dictionary<string, string>()
    {
        {"Id", "6"},
        {"Name", "Skis"},
        {"Price", "100"},
        {"Category", "Sports"}
    };
    var content = new FormUrlEncodedContent(values);

    var request = new HttpRequestMessage()
    {
        RequestUri = new Uri("devnull",UriKind.Relative),
        Method = HttpMethod.Post,
        Content = content
    };
    request.Headers.ExpectContinue = false;
    request.Headers.Add("custom-header","a header value");

    var response = await client.SendAsync(request);

    response.EnsureSuccessStatusCode();
}
[事实]
公共异步任务Post\u a\u form\u和\u change\u某些\u头()
{
var client=newhttpclient(){BaseAddress=\u BaseAddress};
var values=newdictionary()
{
{“Id”,“6”},
{“名字”,“滑雪板”},
{“价格”,“100”},
{“类别”、“运动”}
};
var内容=新的FormUrlEncodedContent(值);
var request=newhttprequestmessage()
{
RequestUri=新Uri(“devnull”,UriKind.Relative),
方法=HttpMethod.Post,
内容=内容
};
request.Headers.ExpectContinue=false;
添加(“自定义头”、“头值”);
var response=wait client.sendaync(请求);
response.EnsureSuccessStatusCode();
}

天哪,到处都是。你确定你没有看过吗?像这样:@cgatian是的,我看过。。相当多,而且似乎有很多混淆。@很好,该请求中没有自定义头的具体定义。但是表单参数在那里,谢谢!天啊,到处都是。你确定你没有看过吗?像这样:@cgatian是的,我看过。。相当多,而且似乎有很多混淆。@很好,该请求中没有自定义头的具体定义。但是表单参数在那里,谢谢!谢谢你。。有助于表单属性,但我还需要添加自定义标题。@billyjean这只是一个xunit测试属性。它使我能够轻松地运行代码片段。谢谢你。。有助于表单属性,但我还需要添加自定义标题。@billyjean这只是一个xunit测试属性。它使我能够轻松地运行代码片段。