我有一个私有HttpClient
的课程。我有一个DoRequest
方法来处理我的所有请求,并获取内容/参数的模板对象。到目前为止,我有2个电话。一种是检索令牌,另一种是获取其他信息(GetInfo)。我的GetInfo
方法需要设置授权标头,所以我在调用DoRequest
之前执行此操作:
this.Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
我开始为Parallel.For
进行负载测试时,有时会开始收到An item with the same key has already been added
异常。现在我明白标题存储在字典中,这就是我获得异常的原因,但我正在寻找有关如何在保留DoRequest
设计的同时解决这个问题的想法。我想解决这个问题的一种方法是在我的HttpContent
对象中设置标题但是它存在于我的DoRequest
方法中,我现在需要将Token参数传递给它。我不是说这是世界上最糟糕的事情,但我正在寻找替代方案,如果有的话。
答案 0 :(得分:0)
你可以查看它是否已经在那里:
static readonly object _o = new object();
...
lock (_o){
if (!this.Client.DefaultRequestHeaders.Contains("Authorization"))
this.Client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);
}
答案 1 :(得分:0)
我认为这个问题的方法是分析我想要的东西。我想重用HttpClient
但处理任何授权标头。我能想到的最佳方法是使用HttpRequestMessage
并将令牌传递给我的DoRequest
方法。在我的方法中,我做:
HttpRequestMessage reqmsg = new HttpRequestMessage(method, uri);
reqmsg.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token ?? string.Empty);
reqmsg.Content = formContent;