以下测试无法解释:
[Test]
public void CrazyAssHttpRequestMessageTest()
{
var subject = new HttpRequestMessage()
{
Method = HttpMethod.Get,
Content = new StringContent("some content")
};
subject.Content.Headers.Remove("Authorization");
}
例外情况是:
System.InvalidOperationException:未使用的标题名称。确保 请求头与HttpRequestMessage,响应头一起使用 使用HttpResponseMessage,以及带有HttpContent的内容标头 对象。
为什么呢?
,任何其他标题似乎都可以正常工作,用其他东西替换授权答案 0 :(得分:4)
HttpContentHeaders类仅支持HTTP标头的子集 - 与内容相关的标头。以这种方式拆分它们似乎有点奇怪的决定,但这就是框架的工作方式。
结果是request.Content.Headers
中永远不会有授权标题。
如果您尝试从HttpRequestHeaders或HttpResponseHeaders删除"Content-Type"
,或者尝试在不调用{{3}的情况下向这些集合中添加意外标头,则会收到完全相同的错误}。更令人沮丧的是,如果您尝试检查无效的标头,Contains()
将抛出。您可以使用TryAddWithoutValidation检查是否存在而不必担心标题集的确切类型,或者只使用request.Content.Headers.Any(x => x.Key == "Authorization")
。
上面链接的类有一个明确支持的标题列表(作为强类型属性),例如HttpHeaders.TryGetValues