默认请求标头不接受任何值,它始终为空

Pas*_*cal 7 asp.net-web-api asp.net-web-api2

我正在进行web api集成测试.

我想将我的不记名令牌传递给Http请求的标头:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "eJ43k5l435j34l5j43l5j34l5jl35j34l5j344l.4534535.534534sample...");
Run Code Online (Sandbox Code Playgroud)

当这行代码完成后,我查看httpClient.DefaultRequestHeaders.Authorization属性,它是NULL?

为什么这个?

UPDATE

这是来自我的集成测试类的基类:

 protected HttpClient Client { get { return server.HttpClient; } }
Run Code Online (Sandbox Code Playgroud)

当我手动在测试类中新建一个http客户端时:

var client = new HttpClient();
client.DefaultRequestHeaders.Add("key","value");
Run Code Online (Sandbox Code Playgroud)

它工作但不是我的客户!

更新2

好的我发现了这个:

 var c = Client;
 c.DefaultRequestHeaders.Add("bla", "bla");
Run Code Online (Sandbox Code Playgroud)

它工作,但为什么我必须在一个新变量中读取我的客户端?

Dal*_*row 0

我读过(在一篇我找不到的文章中,抱歉)HttpClient 上的 Auth 标头(特别是在内存 TestServer 主机中,它显然无法处理经过身份验证的服务,因此对我来说似乎有点无用?请参阅https ://blog.kloud.com.au/2014/10/26/asp-net-web-api-integration-testing-with-one-line-of-code/ “不幸的是,内存解决方案不\xe2\ x80\x99t 开箱即用。似乎它可以\xe2\x80\x99t 处理身份验证。我使用 UseJwtBearerAuthentication (JWT 不记名令牌中间件),我的 api 调用导致 401") 在 webapi 中仅是 GET - 我有同样的问题,尝试针对经过身份验证的端点进行集成测试 - 我得到了不记名令牌,将其添加到标头中,但在下一行代码中,它是 NULL。

\n\n

我找到的建议(以及我得到的解决方案)是将 Bearer 标头添加到 HttpRequestMessage 标头,而不是 HttpClient 标头,然后使用 HttpClient.SendAsync 而不是 HttpClient.PostAsync (显然,无论出于何种原因,发布正文内容但不是标题)。

\n\n

我已经浪费了很多时间试图解决这个问题,并且您发现的大多数教程都不涉及身份验证标头,所以我很惊讶更多的人不讨论这个问题(当然假设我不是只是一个布偶)。但是,是的,请尝试将您的身份验证标头添加到请求消息中,而不是 http 客户端中。

\n