为不同的用户重用 HttpClient
Reusing HttpClient for different users
我阅读了很多有关使用 HttpClient
的最佳实践的资料。大多数人建议在应用程序的生命周期内重复使用它,即使它是 IDisposable
.
我的 Web 应用程序正在与各种 API 进行通信,例如 Facebook Graph API、Twitter API 和 Instagram API。
计划是为每个与之通信的 API 创建一个单独的 HttpClient,建议这样做,因为这样我就可以重用一些 header。
但现在问题来了,让我们以 Twitter API 为例,每个使用我的网络应用程序的用户都有自己的授权 header(用户绑定访问令牌)。我相信这意味着我无法将授权 header 设置为 HttpClient
object.
的 DefaultRequestHeaders
对于具有不同权限 header 的多个用户重复使用 HttpClient
时,最佳做法是什么?
我可以为每个请求创建一个 HttpRequestMessage
object 并在 httpRequestMessage object 上设置授权 header,而不是将其设置为默认授权,httpClient.DefaultRequestHeaders.Authorization
?
谢谢。
因为创建 HttpClient
会产生一些成本(尤其是套接字的数量),所以重用 HttpClient
实例会带来一些好处。它也是 thread-safe 。
为了在一个客户端实例的多个并发调用之间没有依赖关系,关键模式是使用 HttpRequestMessage
class 并调用 HttpClient.SendAsync
方法(而不是使用 more方便 HttpClient.GetAsync
, PostAsync
, ...).
像这样:
var request = new HttpRequestMessage() {
RequestUri = new Uri("http://api.twitter.com/someapiendpoint"),
Method = HttpMethod.Get
}
// set the authorization header values for this call
request.Headers.Accept.Add(...);
var response = await client.SendAsync(request);
现在 HttpRequestMessage
的请求 headers 将被使用(不再是 DefaultRequestHeaders
)。
我阅读了很多有关使用 HttpClient
的最佳实践的资料。大多数人建议在应用程序的生命周期内重复使用它,即使它是 IDisposable
.
我的 Web 应用程序正在与各种 API 进行通信,例如 Facebook Graph API、Twitter API 和 Instagram API。
计划是为每个与之通信的 API 创建一个单独的 HttpClient,建议这样做,因为这样我就可以重用一些 header。
但现在问题来了,让我们以 Twitter API 为例,每个使用我的网络应用程序的用户都有自己的授权 header(用户绑定访问令牌)。我相信这意味着我无法将授权 header 设置为 HttpClient
object.
对于具有不同权限 header 的多个用户重复使用 HttpClient
时,最佳做法是什么?
我可以为每个请求创建一个 HttpRequestMessage
object 并在 httpRequestMessage object 上设置授权 header,而不是将其设置为默认授权,httpClient.DefaultRequestHeaders.Authorization
?
谢谢。
因为创建 HttpClient
会产生一些成本(尤其是套接字的数量),所以重用 HttpClient
实例会带来一些好处。它也是 thread-safe 。
为了在一个客户端实例的多个并发调用之间没有依赖关系,关键模式是使用 HttpRequestMessage
class 并调用 HttpClient.SendAsync
方法(而不是使用 more方便 HttpClient.GetAsync
, PostAsync
, ...).
像这样:
var request = new HttpRequestMessage() {
RequestUri = new Uri("http://api.twitter.com/someapiendpoint"),
Method = HttpMethod.Get
}
// set the authorization header values for this call
request.Headers.Accept.Add(...);
var response = await client.SendAsync(request);
现在 HttpRequestMessage
的请求 headers 将被使用(不再是 DefaultRequestHeaders
)。