从 Flurl 重播 HttpCall
Replay an HttpCall From Flurl
我正在编写错误处理程序来处理令牌刷新。当我收到 expired_token
错误时,我正在刷新令牌,我想重播请求,但我不确定如何
public async Task HandleErrorAsync(HttpCall call)
{
var exception = call.Exception;
if (exception is FlurlHttpException)
{
FlurlHttpException ex = (exception as FlurlHttpException);
var errorResponse = await ex.GetResponseJsonAsync<ErrorResponse>();
if(errorResponse.Errors.Any(x => x.Id == EXPIRED_TOKEN))
{
await this.RefreshOAuthToken();
//How can I Replay the request
//call.Response = call.Request.Replay();
call.ExceptionHandled = true;
}
}
}
刷新令牌后,我可以访问刚刚引发过期令牌错误的 HttpCall 对象。我想重播请求并替换响应,但我不确定该怎么做。
如何在 Flurl 中重播来自 HttpCall 的请求?
我发现了一个重载来一般地发送我的请求,我做了一个扩展方法
public static async Task<HttpCall> Replay(this HttpCall call)
{
call.Response = await call.FlurlRequest.SendAsync(call.Request.Method, call.Request.Content);
return call;
}
也许您想看一下名为 polly 的 c# 库。我认为它解决了开发人员面临的大部分重试问题。
https://github.com/App-vNext/Polly
您可以使用 polly 或其他符合您需要的重试策略
// Retry multiple times, calling an action on each retry
// with the current exception and retry count
Policy
.Handle<SomeExceptionType>()
.Retry(3, (exception, retryCount) =>
{
// do something
});
我正在编写错误处理程序来处理令牌刷新。当我收到 expired_token
错误时,我正在刷新令牌,我想重播请求,但我不确定如何
public async Task HandleErrorAsync(HttpCall call)
{
var exception = call.Exception;
if (exception is FlurlHttpException)
{
FlurlHttpException ex = (exception as FlurlHttpException);
var errorResponse = await ex.GetResponseJsonAsync<ErrorResponse>();
if(errorResponse.Errors.Any(x => x.Id == EXPIRED_TOKEN))
{
await this.RefreshOAuthToken();
//How can I Replay the request
//call.Response = call.Request.Replay();
call.ExceptionHandled = true;
}
}
}
刷新令牌后,我可以访问刚刚引发过期令牌错误的 HttpCall 对象。我想重播请求并替换响应,但我不确定该怎么做。
如何在 Flurl 中重播来自 HttpCall 的请求?
我发现了一个重载来一般地发送我的请求,我做了一个扩展方法
public static async Task<HttpCall> Replay(this HttpCall call)
{
call.Response = await call.FlurlRequest.SendAsync(call.Request.Method, call.Request.Content);
return call;
}
也许您想看一下名为 polly 的 c# 库。我认为它解决了开发人员面临的大部分重试问题。 https://github.com/App-vNext/Polly
您可以使用 polly 或其他符合您需要的重试策略
// Retry multiple times, calling an action on each retry
// with the current exception and retry count
Policy
.Handle<SomeExceptionType>()
.Retry(3, (exception, retryCount) =>
{
// do something
});