gpt4 book ai didi

c# - 为不同的用户重用 HttpClient

转载 作者:太空狗 更新时间:2023-10-29 21:16:33 25 4
gpt4 key购买 nike

我已经阅读了很多有关使用 HttpClient 的最佳实践的资料。大多数人建议在应用程序的生命周期内重复使用它,即使它是 IDisposable

我的 Web 应用程序正在与各种 API 通信,例如 Facebook Graph API、Twitter API 和 Instagram API。

计划是为每个与之通信的 API 创建一个单独的 HttpClient,这是推荐的做法,因为这样我就可以重用一些 header 。

但现在问题来了,让我们以 Twitter API 为例,使用我的网络应用程序的每个用户都有自己的授权 header (用户绑定(bind)访问 token )。我相信这意味着我无法将授权 header 设置为 HttpClient 对象的 DefaultRequestHeaders。

为具有不同授权 header 的多个用户重用 HttpClient 时,最佳做法是什么?

我可以为每个请求创建一个 HttpRequestMessage 对象并在 httpRequestMessage 对象上设置授权 header ,而不是将其设置为默认 header httpClient.DefaultRequestHeaders.Authorization

谢谢。

最佳答案

因为创建 HttpClient 会产生一些成本(尤其是套接字的数量),所以重用 HttpClient 实例会带来一些好处。它也是线程安全的。

为了在一个客户端实例的多个并发调用之间没有依赖关系,关键模式是使用 HttpRequestMessage类并调用 HttpClient.SendAsync 方法(而不是使用更方便的 HttpClient.GetAsyncPostAsync ...)。

像这样:

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 的请求 header (不再是 DefaultRequestHeaders)。

关于c# - 为不同的用户重用 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40696571/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com