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就是我需要担心的全部。如果您需要修改内容类型之类的内容,您仍然需要在请求上使用内容标题。