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

n a*_* as 15 c# httpresponse

我有一些工作代码:

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

//以上工作适用于简单的标题,例如"application/json"

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

如果我尝试在.Result行之前添加以下内容,则intellisense会抱怨("标题"一词为红色,"无法解析符号'标题'":

client.Headers.Add("myKey", "foo");
client.Headers.Add("Accept", "image/foo1");
Run Code Online (Sandbox Code Playgroud)

SwD*_*n81 25

您可以Headers通过以下方式进入酒店StringContent:

var content = new StringContent(Request, Encoding.UTF8, header);
content.Headers.Add(...);
Run Code Online (Sandbox Code Playgroud)

然后将StringContent传递给PostAsync调用:

response = client.PostAsync(Url, content).Result;
Run Code Online (Sandbox Code Playgroud)

  • 好的...这在某种程度上有所帮助(一组标题是可以的),但是......我现在遇到:误用标题名称.确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用.我不确定违规集是响应还是内容标题.我该如何添加? (3认同)

Mr.*_*ung 19

我停止使用Post/Get*Async方法支持该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();
Run Code Online (Sandbox Code Playgroud)


kmc*_*mee 6

你也可以使用

var client = new HttpClient();
client.DefaultRequestHeaders.TryAddWithoutValidation("headername","headervalue");
Run Code Online (Sandbox Code Playgroud)

如果您只想在 HttpClient 类上设置标头一次。下面是MSDN文档DefaultRequestHeaders.TryAddWithoutValidation