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
和 HttpClient
。 RestClient
无论如何都会实例化一个 HttpClient
实例。如果愿意,您可以向 RestClient
构造函数提供自己的 HttpClient
实例。
如果您只需要一个 URL 生成器,那么 Flurl 可能会更好。
我迁移到新版本的 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
和 HttpClient
。 RestClient
无论如何都会实例化一个 HttpClient
实例。如果愿意,您可以向 RestClient
构造函数提供自己的 HttpClient
实例。
如果您只需要一个 URL 生成器,那么 Flurl 可能会更好。