内容标头删除字符串授权失败
本文关键字:字符串 授权 失败 删除 | 更新日期: 2023-09-27 18:10:30
下面的测试莫名其妙地失败了:
[Test]
public void CrazyAssHttpRequestMessageTest()
{
var subject = new HttpRequestMessage()
{
Method = HttpMethod.Get,
Content = new StringContent("some content")
};
subject.Content.Headers.Remove("Authorization");
}
例外是:
系统。InvalidOperationException:错误使用的报头名称。确保请求头与HttpRequestMessage、响应头一起使用使用HttpResponseMessage,使用HttpContent对象。
为什么?任何其他头似乎工作良好,替换授权与其他东西,一切都是好的。
httpcontenttheaders类只支持HTTP报头的一个子集——与内容相关的报头。以这种方式拆分它们似乎有点奇怪,但这就是框架的工作方式。
结果是request.Content.Headers
中永远不会有授权头。
你得到完全相同的错误,如果你试图从HttpRequestHeaders或HttpResponseHeaders中删除"Content-Type"
,或者如果你试图添加一个意想不到的头到这些集合而不调用TryAddWithoutValidation。更令人沮丧的是,Contains()
将抛出,如果你试图检查一个无效的头。您可以检查是否存在而不抛出,而不用担心使用HttpHeaders的头集合的确切类型。TryGetValues,或者直接使用request.Content.Headers.Any(x => x.Key == "Authorization")
上面链接的类有一个它们显式支持的标头列表(作为强类型属性),例如httpcontenttheaders . contenttype .