服务端GetTypedHeaders获取IfMatch为空但Headers存在对应键值对的原因?
问题原因
GetTypedHeaders()返回的IfMatch属性会严格按照HTTP规范校验ETag格式:根据RFC 7232规范,If-Match请求头的ETag值必须用双引号包裹,弱ETag还需要额外增加W/前缀。
你客户端发送的If-Match值00000000E0D09CA0没有带双引号,不符合标准格式,所以强类型解析器直接忽略了这个非法值,导致IfMatch属性返回空数组,而Headers集合存储的是原始请求头未做格式校验,所以可以正常获取到值。
修复方案
客户端侧修改(推荐)
发送If-Match时给值包裹双引号即可:
HttpClient httpClient = new HttpClient(); httpClient.DefaultRequestHeaders.TryAddWithoutValidation("If-Match", "\"00000000E0D09CA0\"");
服务端侧兼容(无法修改客户端时使用)
直接从原始请求头里取值,不需要走强类型解析:
var ifMatchValue = this.HttpContext.Request.Headers.IfMatch.FirstOrDefault() ?? string.Empty; // 可选:统一移除值里的双引号做标准化处理 ifMatchValue = ifMatchValue.Trim('"');
内容的提问来源于stack exchange,提问作者PaulG
相关产品推荐
相关产品推荐

