Asp.net web api 默认请求标头不接受其始终为空的任何值

Asp.net web api 默认请求标头不接受其始终为空的任何值,asp.net-web-api,asp.net-web-api2,Asp.net Web Api,Asp.net Web Api2,我正在做一个web api集成测试 我想将我的承载令牌传递到Http请求的标头: httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "eJ43k5l435j34l5j43l5j34l5jl35j34l5j344l.4534535.534534sample..."); 完成这行代码后,我查看了httpClient.DefaultRequestHeaders.Author

我正在做一个web api集成测试

我想将我的承载令牌传递到Http请求的标头:

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "eJ43k5l435j34l5j43l5j34l5jl35j34l5j344l.4534535.534534sample...");
完成这行代码后,我查看了
httpClient.DefaultRequestHeaders.Authorization
属性,它是否为NULL

为什么会这样

更新

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

 protected HttpClient Client { get { return server.HttpClient; } }
var client = new HttpClient();
client.DefaultRequestHeaders.Add("key","value");
在测试类中手动新建http客户端时:

 protected HttpClient Client { get { return server.HttpClient; } }
var client = new HttpClient();
client.DefaultRequestHeaders.Add("key","value");
它对我的客户有效,但对我的客户无效

更新2

好吧,我发现了:

 var c = Client;
 c.DefaultRequestHeaders.Add("bla", "bla");
它可以工作,但为什么我必须在新变量中读取我的客户机?

我读过(在一篇我找不到的文章中,很抱歉)HttpClient上的Auth头(特别是在inmemory TestServer主机中,它显然无法处理经过身份验证的服务,因此对我来说似乎没有什么用处?请参阅“不幸的是,内存中的解决方案不适合我。它似乎无法处理身份验证。我使用UseJWTBeareAuthentication(JWT承载令牌中间件),我的api调用导致401”)在webapi中,我遇到了同样的问题,试图对经过身份验证的端点进行集成测试,我得到了我的承载令牌,将其添加到头中,但在下一行代码中,它为NULL

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


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

我想我需要更多的代码来解决这个问题。。您的第一行中的
httpClient
来自哪里?正如我看到的,这是一个httpClient对象,是来自
受保护的httpClient客户端{get{return server.httpClient;}的新对象吗
?如果是,那么
server
的所有功能是什么?您是在API上使用此代码,还是在使用API的应用程序上使用此代码?是否可以添加一些有关服务器变量类型的信息?如果是您创建的类或框架类型。如果是您自己的类,是否可以提供有关HttpClient如何使用的更多信息stantiated?你有没有找到解决方案?我有完全相同的问题,试图在WebAPI2代码库上运行集成测试,我分配了头(就像你做的那样),下一行总是空的…这让我很恼火。我没有在HttpClient上设置头,而是找到了一个(单个)例如,程序员改为在HttpMessageRequest上设置头,并使用HttpClient.SendAsync而不是HttpClient.PostAsJson发送头。这花费了我很多时间,我仍然不知道为什么不能在HttpClient上设置头??