【发布时间】:2015-08-19 09:21:18
【问题描述】:
在 Asp.Net Web Api 2 中,使用以下传统方法设置 HttpClient Accept Header 有什么区别:
HttpClient client = HttpClientFactory.Create(handler);
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
还有以下方法:
var headers = new Dictionary<string, string>
{
{"Accept", "application/json"}};
headers.ForEach(h => client.DefaultRequestHeaders.Add(h.Key, h.Value));
更新 1:
根据@DarrenMiller 在以下帖子What is the overhead of creating a new HttpClient per call in a WebAPI client? 中的回答,似乎首选方法是使用DefaultRequestHeaders 属性,因为它包含用于多次调用的属性。这是否意味着如果我使用简单的字典设置默认标题,我的HttpClient client 将不如使用DefaultRequestHeaders 的效率高?另外我真的不明白DefaultRequestHeaders 中的值将如何被重用?假设我使用 HttpClientFactory.Create 创建了 20 个 HttpClient client,并在其中的每一个中设置了 DefaultRequestHeaders 属性 [我真的需要这样做,因为 DefaultRequestHeaders 是为了被重用吗?!]。每次创建HttpClient client 时设置DefaultRequestHeaders 是否会导致某种性能下降?
【问题讨论】:
-
可能是因为您正在向
Accept添加内容,而在第二种情况下您正在向其他地方添加内容。 -
最好的办法是使用 Fiddler (telerik.com/fiddler) 之类的东西来观察在 Fiddler 运行时执行这两种方法时请求中实际发送的内容。它将记录 HTTP 流量并允许您查看差异。
-
@MHOOS RE 您的更新:您应该重复使用您的
HttpClient。只有这样,默认标头才会被重用。
标签: c# web-services asp.net-web-api asp.net-web-api2