内容标题删除字符串授权失败
以下测试无法解释:
[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对象的内容头。
为什么? 其他任何头文件似乎都可以正常工作,用别的东西代替授权,一切正常。
HttpContentHeaders类仅支持HTTP标头的一个子集 - 与内容相关的标头。 看起来有点奇怪的决定将它们分开,但这就是框架的工作方式。
结果是request.Content.Headers
永远不会有Authorization头。
如果尝试从HttpRequestHeaders或HttpResponseHeaders中删除"Content-Type"
,或者如果尝试在未调用TryAddWithoutValidation的情况下向这些集合添加一个意外的标头,则会得到完全相同的错误。 更令人沮丧的是,如果您尝试检查无效标题,则Contains()
会抛出。 你可以检查存在而不用担心使用HttpHeaders.TryGetValues的头部集合的确切类型,或者只使用request.Content.Headers.Any(x => x.Key == "Authorization")
。
上面链接的类有它们明确支持的头文件列表(如强类型属性),例如HttpContentHeaders.ContentType。
链接地址: http://www.djcxy.com/p/46253.html