首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Intercept C# HttpClient GetAsync

Intercept C# HttpClient GetAsync
EN

Stack Overflow用户
提问于 2015-03-18 02:10:37
回答 2查看 9.1K关注 0票数 6

我有一个web项目(C#,MVC5,但没有WebAPI)和一个简单的HTTP REST客户端,它调用外部REST服务并获取accessToken等。

我想检查我对statusCode 401的所有Get/PostAsync调用的响应,但我发现在实现DelegatingHandler时只能覆盖SendAsync方法。

代码语言:javascript
复制
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。)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-18 05:32:13

我认为你在正确的轨道上。你不需要改变你的调用来使用SendAsync而不是GetAsyncPostAsync等等。相反,您需要更改实例化HttpClient的方式

代码语言:javascript
复制
var client = new HttpClient(new CustomDelegatingHandlerTokenRefresher());
// GetAsync, PostAsync, etc will hit your handler
票数 7
EN

Stack Overflow用户

发布于 2015-03-18 02:17:44

使用装饰器拦截器模式。

混凝土装饰器示例:

代码语言:javascript
复制
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);
    }
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29106664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档