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

时间:2014-06-27 17:06:20

标签: c# .net asp.net-web-api

以下测试无法解释:

    [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的内容标头   对象。

为什么呢?

,任何其他标题似乎都可以正常工作,用其他东西替换授权

1 个答案:

答案 0 :(得分:4)

HttpContentHeaders类仅支持HTTP标头的子集 - 与内容相关的标头。以这种方式拆分它们似乎有点奇怪的决定,但这就是框架的工作方式。

结果是request.Content.Headers中永远不会有授权标题。

如果您尝试从HttpRequestHeadersHttpResponseHeaders删除"Content-Type",或者尝试在不调用{{3}的情况下向这些集合中添加意外标头,则会收到完全相同的错误}。更令人沮丧的是,如果您尝试检查无效的标头,Contains()将抛出。您可以使用TryAddWithoutValidation检查是否存在而不必担心标题集的确切类型,或者只使用request.Content.Headers.Any(x => x.Key == "Authorization")

上面链接的类有一个明确支持的标题列表(作为强类型属性),例如HttpHeaders.TryGetValues