【发布时间】:2017-01-28 13:00:38
【问题描述】:
我正在调用外部 API,并且想要处理调用返回 UnauthorizedHttpResponseMessage 的事件。发生这种情况时,我想刷新访问令牌并再次拨打电话。
我正在尝试将Polly 与以下代码一起使用:
public async Task<HttpResponseMessage> MakeGetRequestAsync()
{
var retryPolicy = Policy
.HandleResult<HttpResponseMessage>(r => r.StatusCode == HttpStatusCode.Unauthorized)
.Retry(1, (exception, retryCount) =>
{
RefreshAccessToken();
});
var result = await retryPolicy.ExecuteAsync(() => CallApiAsync());
return result;
}
private async Task<HttpResponseMessage> CallApiAsync()
{
var url = Options.ResourceSandboxUrl;
var httpClient = new HttpClient();
SetRequestHeaders(httpClient);
var response = await httpClient.GetAsync(url);
response.StatusCode = HttpStatusCode.Unauthorized;
return response;
}
我在
ExecuteAsync语句和DoSomethingAsync中设置断点 - 当我越过ExecuteAsync时,DoSomethingAsync未被调用,控制权返回给调用MakeGetRequestAsync的函数
我不明白为什么不调用 DoSomethingAsync - 任何人都可以帮助我实现我想要实现的目标吗?
我查看了有关 Stack Overflow 的 Polly 文档和 Polly 问题,但我不知道发生了什么......
【问题讨论】:
标签: c# asp.net-mvc polly