【发布时间】: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