107版本的RestSharp IAuthenticator如何实现并且是线程安全的?

RestSharp IAuthenticator in version 107 how to implement and is thread safe?

我迁移到新版本的 RestSharp (v107),文档中说这个版本使用 HttpClient 并且必须为多个请求重用同一个实例。

另一方面,IAuthenticator 接口以 RestClient 和 RestRequest 作为参数实现“Authenticate”方法。

RestRequest 每个请求一个,没问题,但 RestClient 与多个其他请求同时共享 运行。

我只使用RestClient对象调用.BuildUri(RestRequest)方法获取Uri,但是我的HttpClient单实例是为不同的主机请求共享的,所以并发时不会有问题吗?

此外,还有一个附带问题。新的 IAuthenticator“Authenticate”方法实现 returns ValueTask。我应该return做什么?旧的return无效。

Authenticate 方法假设将必要的身份验证 headers 添加到 RestRequest 实例。它不会更改提供的 RestClient 实例中的任何内容,因此它完全是 thread-safe.

Authenticate 到 return ValueTask 作为身份验证器的原因可以对身份验证 API 进行异步调用。例如,我描述了如何构建一个 Twitter authenticator,它对 Twitter API 进行异步调用以获取不记名令牌。它只执行一次,因此所有后续调用都将使用第一次调用检索到的令牌。

如果您有一个 multi-tenant 环境并且需要为每个请求获取一个令牌,还有一个关于将 Authenticator 添加为请求 属性 的讨论。现在正在进行中。

此外,你不需要在外面使用RestClient HttpClientRestClient 无论如何都会实例化一个 HttpClient 实例。如果愿意,您可以向 RestClient 构造函数提供自己的 HttpClient 实例。

如果您只需要一个 URL 生成器,那么 Flurl 可能会更好。