.NET Core HttpRequest Headers优先级及自定义头部添加位置咨询
HttpClient请求头集合的选择与优先级规则
自定义请求头A的存放位置
- 如果这个自定义头是所有HTTP请求都需要携带的,添加到
HttpClient.DefaultRequestHeaders集合; - 如果只是单个特定请求需要携带的,添加到
HttpRequestMessage.Headers集合; HttpContent.Headers仅用于存放与请求内容直接相关的头(如Content-Type、Content-Length、Content-Encoding等),非内容相关的自定义头不要放在这里。
不同集合的优先级与冲突处理
当不同集合中存在相同键的请求头时,规则如下:
HttpClient.DefaultRequestHeadersvsHttpRequestMessage.Headers:HttpRequestMessage.Headers中的头会覆盖HttpClient.DefaultRequestHeaders的同名头,不会抛出异常。比如同时在两个集合中设置Host头,最终发送的是HttpRequestMessage.Headers里的Host值。HttpClient.DefaultRequestHeadersvsHttpContent.Headers:两类头负责的范畴不同,前者是请求级通用头,后者是内容相关头,正常场景不会出现同名冲突。若强行在DefaultRequestHeaders中添加内容类头(如Content-Type),发送请求时会自动忽略DefaultRequestHeaders中的该头,以HttpContent.Headers的内容为准,无异常抛出。HttpRequestMessage.HeadersvsHttpContent.Headers:同理,前者为请求通用头,后者为内容头,正常无冲突。若强行在HttpRequestMessage.Headers中添加内容类头,发送时会以HttpContent.Headers的对应头为准,忽略HttpRequestMessage.Headers中的同名项,不抛出异常。
内容的提问来源于stack exchange,提问作者Ori.Lin
相关产品推荐
相关产品推荐

