我有一个web项目(C#,MVC5,但没有WebAPI)和一个简单的HTTP REST客户端,它调用外部REST服务并获取accessToken等。
我想检查我对statusCode 401的所有Get/PostAsync调用的响应,但我发现在实现DelegatingHandler时只能覆盖SendAsync方法。
class CustomDelegatingHandler : DelegatingHandler
{
async protected override Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
HttpResponseMessage response = await base.SendAsync(request, cancellationToken);
if (response.StatusCode == HttpStatusCode.Unauthorized)
{我还可以做些什么来避免将所有异步调用的实现更改为使用SendAsync
(我真正想做的是刷新accessToken。)
发布于 2015-03-18 05:32:13
我认为你在正确的轨道上。你不需要改变你的调用来使用SendAsync而不是GetAsync,PostAsync等等。相反,您需要更改实例化HttpClient的方式
var client = new HttpClient(new CustomDelegatingHandlerTokenRefresher());
// GetAsync, PostAsync, etc will hit your handler发布于 2015-03-18 02:17:44
使用装饰器或拦截器模式。
混凝土装饰器示例:
public class CustomDelegatingHandlerTokenRefresher() : DelegatingHandler
{
public CustomDelegatingHandlerTokenRefresher(DelegatingHandler handler)
{
InnerHandler = handler;
}
protected override async Task<HttpResponseMessage> SendAsync(
HttpRequestMessage request, CancellationToken cancellationToken)
{
RefreshToken();
return await InnerHandler.SendAsync(request, cancellationToken);
}
}https://stackoverflow.com/questions/29106664
复制相似问题