cle*_*d87 2 c# header httpclient request
我注意到在修改HttpClient.DefaultRequestHeaders时使用 HttpClient不是线程安全的,但我想发出尽可能多的请求。每个请求我都需要一个自定义标头(另外两个标头始终相同)。URL也有点变化
目前我正在为每个请求创建一个新的 HttpClient,但我觉得创建 10k+ HttpClients 不是这里的最佳选择。
我想制作一个带有 2 个 DefaultRequestHeaders 的静态 HttpClient,并为每个请求使用这个 HttpClient,但还要添加一个自定义标头。
我想尽快完成这个,所以如果你有别的东西,我会接受的。
Parallel.ForEach(Requests, Request =>
{
var Client = new HttpClient();
Client.DefaultRequestHeaders.Clear();
Client.DefaultRequestHeaders.Add("Header1", "Value1");
Client.DefaultRequestHeaders.Add("Header2", "Value2");
Client.DefaultRequestHeaders.Add("Header3", "Value for exact this request");
var response = Client.PutAsync(new Uri($"http://example.com/books/1234/readers/837"), null); //.Result (?)
Client.Dispose();
});
Run Code Online (Sandbox Code Playgroud)
不要DefaultRequestHeaders用于不适用于发送的所有请求的标头HttpClient。
另外,不要为HttpClient每个请求创建一个。
您可以通过HttpRequestMessage为每个请求创建一个,应用您需要的任何标头,并在HttpClient整个请求中使用相同的标头来轻松做到这一点.SendAsync():
using (var request = new HttpRequestMessage(HttpMethod.Put, url)
{
request.Headers.<add here>;
// optionally set .Content
using (var response = await httpClient.SendAsync(request))
{
// ... process response
}
}
Run Code Online (Sandbox Code Playgroud)