内容标题删除字符串授权失败

以下测试无法解释:

    [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

上一篇: Content Headers Remove fails for string Authorization

下一篇: Type header on HttpResponseMessage headers?