正确更改C#中不同调用的HttpClient标头

本文关键字:调用 HttpClient 标头 | 更新日期: 2023-09-27 17:58:42

我正在编写一个异步调用POST和GET的程序。我遇到的问题是,每个POST和GET有时都有不同的头/主机参数。

我在main()类外部初始化了HttpClient,在main类内部,我有以下

client.DefaultRequestHeaders.Add("Host", "website1.com");

对于另一个GET/POST请求,我希望在HOST参数中有website2

client.DefaultRequestHeaders.Add("Host", "website2.com");

但它们发生了碰撞,它抛出了一个错误,因为它已经存在了。处理这个问题的正确方法是什么?

正确更改C#中不同调用的HttpClient标头

使用SendAsync而不是GetAsync或PostAsync

var request = new HttpRequestMessage(HttpMethod.Get, new Uri("http://targeturi.com"));
request.Headers.Host = "website2.com"
var response = await client.SendAsync(request);

在发送

之前,您可以向请求添加任意数量的标头

很明显,您应该使用两个单独的HttpClient实例,因为DefaultRequestHeaders不是线程安全的,因此您将在多线程情况下遇到问题。

有关更多详细信息,请参阅:HttpClient–它真的是线程安全的吗?