带有 Polly 刷新令牌的 RestEase 不起作用

问题描述

真的需要一些帮助才能了解我的重新授权政策有什么问题。

我的政策是这样的:

var policy = Policy
            .HandleResult<HttpResponseMessage>(message => message.StatusCode == HttpStatusCode.Unauthorized)
            .RetryAsync(1,async (result,retryCount) =>
            {
                await _authorizeService.RefreshAccesstoken();
                RestEaseClient.Token = _authorizeService.Accesstoken;
            });

IRestEaseClient 看起来像这样:

public interface IRestEaseClient
{        
    [Header("X-Token")]
    string Token { get; set; }

    ["root")]
    Task SomeMethod();
    .................
}

当令牌过期时,策略重试函数内的断点被命中,我成功接收到新令牌,将其值设置为 IrestEaseClient.Token 标头,但由于某种原因,重试请求使用旧标头值,我仍然get 401。在此之后的下一个请求将正常进行,不会出现 401 或点击重新授权策略代码

解决方法

答案是 HttpRequestMessage 已经被 RestEase 构建了,现在 RestEase 已经不在了。您可以随心所欲地更改 RestEaseClient.Token ,直到您再次调用 SomeMethod 以构造新的 HttpRequestMessage 时,才会产生任何影响。

查看此讨论以了解详细信息https://github.com/canton7/RestEase/discussions/192