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

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

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。)

最佳答案

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

var client = new HttpClient(new CustomDelegatingHandlerTokenRefresher());
// GetAsync, PostAsync, etc will hit your handler

关于c# - 拦截C#HttpClient GetAsync,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29106664/

10-13 06:31