Search code examples
c#httpclientsendasync

Intercept C# HttpClient GetAsync


I have a web project (C#, MVC5 but no WebAPI) and a simple HTTP REST client that is calling an external REST service and acquires an accessToken etcing.

I want to check the response from all my Get/PostAsync calls for statusCode 401 but I see that I can only override the SendAsync method when implementing the 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)
        {

Is there something else I can do so as not to change the implementation of all my async calls to use SendAsync?

(What I really really want to do is refresh the accessToken.)


Solution

  • I think you're on the right track. You wouldn't need to change your calls to use SendAsync instead of GetAsync, PostAsync, etc though. Rather, you'd need to change how you instantiate HttpClient:

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