c# - .NET Core HttpRequest header 优先级是什么?

标签 c# .net http .net-core dotnet-httpclient

目前我正在做一个http请求发送任务。我知道我们有不同的方法来向请求添加 header 。

  1. HttpClient.DefaultRequestHeaders
  2. HttpRequestMessage.Headers
  3. HttpContent.Headers

如果我有一个名为 A 的自定义 header ,我应该将 A 插入到 (1, 2, 3) 的哪个 header 集合中?

如果 (1,2), (1,3), OR (2,3) 包含相同的 key ,例如1和2都有“Host”,它们的优先级是什么?一个人会取代其他人吗?或者它会抛出异常?

最佳答案

这是一个好问题。每个 Headers 集合都有一个专门的用途(正如其他评论者也提到的那样)。

目的

  • DefaultRequestHeaders 可用于设置要在多个请求中重用的 header
  • HttpRequestMessage
  • Headers 可用于设置 AcceptAccept-Encoding 等 header 授权Cookie
  • HttpContent
  • Headers 可用于设置诸如 Content-DispositionContent-Range内容长度内容类型

设置标准 header

对于单个请求,DefaultRequestHeaders 上设置的 header 可以被 HttpRequestMessageHeaders 覆盖。

如果您尝试设置

  • HttpRequestMessage 上的 Content-Type header
  • HttpContent 上的 Accept header

然后您将收到一个InvalidOperationException:

System.InvalidOperationException: 'Misused header name. Make sure request headers are used with HttpRequestMessage, response headers with HttpResponseMessage, and content headers with HttpContent objects.'

设置自定义 header

如果您尝试在 HttpRequestMessageHttpContent 上设置相同的任意(非标准) header ,则这两个值都将被发送。


Here我已经更深入地详细介绍了这个主题。

关于c# - .NET Core HttpRequest header 优先级是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74105607/

相关文章:

C# 重载 try/catch

c# - 如何在 C# 中开发基于动态插件的功能

.net - 编写解析器时应该使用哪种设计模式?

http - HTTP DELETE 请求是否允许实体主体?

c# - 如何在 C# 中获取像 IDM Grabber 这样的特殊网站的文件和文件夹

c# - 将枚举绑定(bind)到 LINQ 和 SelectListItem

c# - 接口(interface)隔离原则用法

c# - 为什么属性隐藏同名的继承函数?

.net - system.diagnostics 跟踪如何影响 .net 性能?

http - 用grails接收http状态码