C#HttpHeaders - 具有相同密钥的项目已被添加

问题描述:

自从最近几个月以来,我一直在随机获取此错误。我不知道什么是重现这种具体的方式,但代码多年没有改变,而这个问题只是事发突然..C#HttpHeaders - 具有相同密钥的项目已被添加

System.ArgumentException: An item with the same key has already been added. 
    at System.ThrowHelper.ThrowArgumentException(ExceptionResource resource) 
    at System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add) 
    at System.Net.Http.Headers.HttpHeaders.AddHeaderToStore(String name, HeaderStoreItemInfo info) 
    at System.Net.Http.Headers.HttpHeaders.CreateAndAddHeaderToStore(String name) 
    at System.Net.Http.Headers.HttpHeaders.GetOrCreateHeaderInfo(String name, Boolean parseRawValues) 
    at System.Net.Http.Headers.HttpHeaderValueCollection`1.SetSpecialValue() 
    at System.Net.Http.Headers.HttpGeneralHeaders.set_ConnectionClose(Nullable`1 value) 

所有我想要做的是ConnectionClose设为true或null,像这样:

_httpClient.DefaultRequestHeaders.ConnectionClose = _closingConnections; 

但是然后我得到关于已添加的相同的键的错误等。我该如何调试?

请指教。

谢谢!

+0

的价值在于它可能是你从多个线程在同一HttpClient的设置呢? – Bas

+1

似乎工作进程间歇性地将重复键值插入到请求头字典中(显示在堆栈跟踪中)。如何在分配值之前检查现有字典密钥? –

+0

@Bas是的,它来自多个线程 –

if (_client.DefaultRequestHeaders.Contains("ConnectionClose")) 
{ 
      _client.DefaultRequestHeaders.Remove("ConnectionClose"); 
} 
_client.DefaultRequestHeaders.ConnectionClose = _closingConnections 

试图清理之前重新分配

+0

我设置_client.DefaultRequestHeaders从多个线程,这会有帮助吗? –