Cal*_*lin 6 .net c# 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");
}
Run Code Online (Sandbox Code Playgroud)
例外是:
System.InvalidOperationException:标头名称滥用。确保请求标头与HttpRequestMessage一起使用,响应标头与HttpResponseMessage一起使用,内容标头与HttpContent对象一起使用。
为什么?任何其他标题似乎都可以正常工作,用其他东西替换Authorization,一切都很好。
该HttpContentHeaders类只支持HTTP标头的一个子集-与内容标题。像这样拆分它们似乎有些奇怪,但这就是框架的工作方式。
结果是不会再有Authorization标头request.Content.Headers。
如果尝试"Content-Type"从HttpRequestHeaders或HttpResponseHeaders中删除,或者尝试在不调用TryAddWithoutValidation的情况下向这些集合中添加意外的标头,则会收到完全相同的错误。更令人沮丧的是,Contains()如果您尝试检查无效的标头,则会抛出该事实。您可以使用HttpHeaders.TryGetValues来检查是否存在而不用担心头文件集合的确切类型,或者只使用request.Content.Headers.Any(x => x.Key == "Authorization")。
上面链接的类具有其明确支持的标头的列表(作为强类型属性),例如HttpContentHeaders.ContentType。
| 归档时间: |
|
| 查看次数: |
1675 次 |
| 最近记录: |