如何在 C# 中使用 PostAsync 设置多个 headers?

How do I set multiple headers using PostAsync in C#?

我有一些工作代码:

using (var client = new HttpClient())
{
HttpResponseMessage response;
response = client.PostAsync(Url, new StringContent(Request, Encoding.UTF8, header)).Result;
}

// 以上对于简单的 header 工作正常,例如"application/json"

如果我想要多个 header,我该怎么办?例如。添加 "myKey"、"foo" 对和 "Accept"、"image/foo1"

如果我尝试在 .Result 行之前添加以下内容,intellisense 会抱怨('Headers' 这个词是红色的 "Can't resolve symbol 'Headers'":

client.Headers.Add("myKey", "foo");
client.Headers.Add("Accept", "image/foo1");

您可以访问 Headers property through the StringContent:

var content = new StringContent(Request, Encoding.UTF8, header);
content.Headers.Add(...);

然后将 StringContent 传递给 PostAsync 调用:

response = client.PostAsync(Url, content).Result;

我停止使用 Post/Get *异步方法,转而使用 SendAsync(...) 方法和 HttpRequestMessage Send Async 是老大哥,它可以让您获得其他方式无法实现的全部灵活性。

using System.Net.Http;

var httpRequestMessage = new HttpRequestMessage();

httpRequestMessage.Method = httpMethod;
httpRequestMessage.RequestUri = new Uri(url);

httpRequestMessage.Headers
                  .UserAgent
                  .Add(new Headers.ProductInfoHeaderValue(
                                              _applicationAssembly.Name, 
                                              _applicationAssembly.Version.ToString()));

HttpContent httpContent = new StringContent(json, Encoding.UTF8, "application/json");
switch (httpMethod.Method)
{
    case "POST":
        httpRequestMessage.Content = httpContent;
        break;
}

var result = await httpClient.SendAsync(httpRequestMessage);
result.EnsureSuccessStatusCode();

您也可以使用

var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("headername","headervalue");

如果您只想在 HttpClient class 上设置 headers 一次。这是 DefaultRequestHeaders.TryAddWithoutValidation

上的 MSDN docs