目前我正在做一个http请求发送任务。我知道我们有不同的方法来向请求添加 header 。
HttpClient.DefaultRequestHeaders
HttpRequestMessage.Headers
HttpContent.Headers
如果我有一个名为 A 的自定义 header ,我应该将 A 插入到 (1, 2, 3) 的哪个 header 集合中?
如果 (1,2), (1,3), OR (2,3) 包含相同的 key ,例如1和2都有“Host”,它们的优先级是什么?一个人会取代其他人吗?或者它会抛出异常?
最佳答案
这是一个好问题。每个 Headers
集合都有一个专门的用途(正如其他评论者也提到的那样)。
目的
DefaultRequestHeaders
可用于设置要在多个请求中重用的 headerHeaders
可用于设置Accept
、Accept-Encoding
、等 header 授权
、Cookie
等Headers
可用于设置诸如Content-Disposition
、Content-Range
、内容长度
,内容类型
等
HttpRequestMessage
的 HttpContent
的 设置标准 header
对于单个请求,DefaultRequestHeaders
上设置的 header 可以被 HttpRequestMessage
的 Headers
覆盖。
如果您尝试设置
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
如果您尝试在 HttpRequestMessage
和 HttpContent
上设置相同的任意(非标准) header ,则这两个值都将被发送。
Here我已经更深入地详细介绍了这个主题。
关于c# - .NET Core HttpRequest header 优先级是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74105607/