Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 字符串授权的内容头删除失败_C#_.net_Asp.net Web Api - Fatal编程技术网

C# 字符串授权的内容头删除失败

C# 字符串授权的内容头删除失败,c#,.net,asp.net-web-api,C#,.net,Asp.net Web Api,以下测试无法解释地失败: [Test] public void CrazyAssHttpRequestMessageTest() { var subject = new HttpRequestMessage() { Method = HttpMethod.Get, Content = n

以下测试无法解释地失败:

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

为什么??任何其他头似乎都可以正常工作,用其他东西替换授权,一切正常。

该类只支持HTTP头的子集——与内容相关的头。这样拆分它们似乎有点奇怪,但这就是框架的工作方式

结果是,
request.Content.Headers
中永远不会有授权头

如果尝试从或中删除
“Content Type”
,或者尝试在不调用的情况下向这些集合添加意外的头,则会出现完全相同的错误。更令人沮丧的是,如果您试图检查无效的头,
Contains()
将抛出。您可以使用或只使用
request.Content.Headers.Any(x=>x.Key==“Authorization”)
来检查是否存在,而无需抛出消息头集合的确切类型


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

您是否尝试过
subject.Request.headers.Remove(“授权”)?@DaveHaney是的,这很有效,我还想从请求中删除。我要为OP添加的内容是,标题只有一个位置:在请求上。在代码中,正如@BennorMcCarthy所解释的,请求头被划分为
HttpContentHeaders
HttpRequestHeaders
类(我个人认为这是非常愚蠢的),但是,无论您与一个类还是另一个类交互,都会发生相同的事情:标题最终出现在请求上。@DaveHaney基本上使用request.Headers就是我需要担心的全部。如果您需要修改内容类型之类的内容,您仍然需要在请求上使用内容标题。