C# 将自定义标头设置为 httpclient 会导致错误,因为标头名称被误用

Posted

技术标签:

【中文标题】C# 将自定义标头设置为 httpclient 会导致错误,因为标头名称被误用【英文标题】:C# Setting custom headers to httpclient gives error as misused header name 【发布时间】:2022-01-13 20:48:32 【问题描述】:

我正在尝试设置像这样的自定义标题

x-my-header:somecustomval
content-type:application/vnd.status+json
.
.
.
other headers

我尝试了两种方法,使用标题字典

#1

_httpClient.DefaultRequestHeaders.Clear();

foreach (var h in headers)

  _httpClient.DefaultRequestHeaders.Add(h.Key.ToString(), h.Value.ToString());

#2

HttpRequestMessage req = new HttpRequestMessage();

foreach (var h in headers)

  req.Headers.Add(h.Key.ToString(), h.Value.ToString());

我在这两种方法中遇到的错误是:

错误的标题名称。确保请求标头与 HttpRequestMessage,带有 HttpResponseMessage 的响应标头,以及 带有 HttpContent 对象的内容标头。

如何在 C# net core 3.1 的 HttpClient 中设置 POST 的标头?可以不设置自定义标题吗?

【问题讨论】:

【参考方案1】:

在您的任一尝试中使用HttpHeaders.TryAddWithoutValidation 方法。

在内部,默认的HttpHeaders.Add 将尝试验证您是否添加了已知的 HTTP 标头,如果无效则将失败。

参考HttpHeaders

【讨论】:

谢谢。用方法#1试过了,它奏效了。

以上是关于C# 将自定义标头设置为 httpclient 会导致错误,因为标头名称被误用的主要内容,如果未能解决你的问题,请参考以下文章

带有自定义标头的 C# HttpClient POST 请求发送不正确的 Content-Type 标头字段

HttpClient postasync,带有自定义标头和应用程序/json,用于正文 C#

将自定义标头添加到“请求”

无法使用 C# HttpClient 获取任何 cookie

修改每个请求的请求标头 C# HttpClient PCL

更新添加为 HttpClient 的 DefaultRequestHeaders 的自定义标头值