using System.Net.Http.Headers;
using System.Threading.Tasks;
public static HttpClient _httpClient = new HttpClient(new AuthenticationDelegationHandler());
public class AuthenticationDelegationHandler : DelegatingHandler
public AuthenticationDelegationHandler()
InnerHandler = new HttpClientHandler();
protected override async Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
.HandleResult<HttpResponseMessage>(message => message.StatusCode != HttpStatusCode.OK)
.WaitAndRetryAsync(3, retryAttempt => System.TimeSpan.FromSeconds(1));
return await policy.ExecuteAsync(async ()=> {
request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "Foo");
Console.WriteLine("Admin token is used!");
return await base.SendAsync(request,cancellationToken);});
public class MyHttpClient : HttpClient
public static void Main()
var uri = new Uri("http://google.com");
var requestMessage = new HttpRequestMessage
Method = HttpMethod.Delete,
requestMessage.Headers.Authorization = new AuthenticationHeaderValue("Bearer", "Foo");
Console.WriteLine("User's token is used!");
var response = _httpClient.SendAsync(requestMessage).Result;