【问题标题】:Default Request Header does not accept any value its always null默认请求标头不接受任何值,它始终为空
【发布时间】:2015-11-14 17:53:23
【问题描述】:

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

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

httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", "eJ43k5l435j34l5j43l5j34l5jl35j34l5j344l.4534535.534534sample...");

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

为什么会这样?

更新

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

 protected HttpClient Client { get { return server.HttpClient; } }

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

var client = new HttpClient();
client.DefaultRequestHeaders.Add("key","value");

它有效,但不适用于我的客户!?

更新 2

好的,我发现了这个:

 var c = Client;
 c.DefaultRequestHeaders.Add("bla", "bla");

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

【问题讨论】:

  • 我想我需要更多的代码来解决这个问题。你的第一行中的httpClient 来自哪里?如我所见,这是一个 HttpClient 对象,是来自protected HttpClient Client { get { return server.HttpClient; } } 的新对象吗?如果是这样,server 做了什么。您是在 API 上使用此代码,还是在使用 API 的应用程序上使用此代码?
  • 你能添加一些关于你的服务器变量类型的信息吗?如果它是您创建的类或框架类型。如果它是您自己的一个类,您能否提供有关如何实例化 HttpClient 的更多信息?
  • 您找到解决方案了吗?我有完全相同的问题,试图在 WebAPI2 代码库上运行集成测试,我分配了标题(就像你做的那样),并立即在下一行它总是为空......这让我发疯了。我没有在 HttpClient 上设置标头,而是找到了一个(单个)示例,其中程序员在 HttpMessageRequest 上设置了标头,并使用 HttpClient.SendAsync 而不是 HttpClient.PostAsJson 发送它......这让我付出了很多的时间,我仍然不知道为什么不能在 HttpClient 上设置标头??

标签: asp.net-web-api asp.net-web-api2


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2012-08-23
    • 1970-01-01
    • 2017-03-06
    • 2020-04-20
    • 1970-01-01
    • 1970-01-01
    • 2017-12-02
    • 2022-08-12
    • 2018-06-24
    相关资源
    最近更新 更多