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;
但是然后我得到关于已添加的相同的键的错误等。我该如何调试?
请指教。
谢谢!
答
if (_client.DefaultRequestHeaders.Contains("ConnectionClose"))
{
_client.DefaultRequestHeaders.Remove("ConnectionClose");
}
_client.DefaultRequestHeaders.ConnectionClose = _closingConnections
试图清理之前重新分配
+0
我设置_client.DefaultRequestHeaders从多个线程,这会有帮助吗? –
的价值在于它可能是你从多个线程在同一HttpClient的设置呢? – Bas
似乎工作进程间歇性地将重复键值插入到请求头字典中(显示在堆栈跟踪中)。如何在分配值之前检查现有字典密钥? –
@Bas是的,它来自多个线程 –