Refit结合Polly访问ASP.NET Core Web API

前言

在.NET Core应用中访问ASP.NET Core Web API接口,常用的方式是使用IHttpClientFactory生成HttpClient实例,并通过结合Polly策略,以实现重试,熔断等机制。

在本文中,我们将介绍如何使用Refit,结合Polly访问ASP.NET Core Web API。

Refit介绍

Refit是一个类型安全的REST开源库,可通过Refit更加简单安全地访问Web API接口。

首先,需要将Web API接口转换成interface:

public interface IWeatherAPI
{
    [Get("/WeatherForecast")]
    Task<WeatherForecast[]> Get();
}

然后,通过RestService类生成IWeatherAPI的代理实现,通过代理直接调用Web API接口:

var weatherAPI = RestService.For<IWeatherAPI>("http://localhost:5000");

var weatherForeCasts = await weatherAPI.Get();

结合Polly

1.手工执行

可以通过Policy.ExecuteAsync方法执行Web API调用代码。下列代码实现了重试机制:

var weatherAPI = RestService.For<IWeatherAPI>("http://localhost:5000");

var weatherForeCasts = await Policy
    .Handle<HttpRequestException>(
        ex => ex.InnerException.Message.Any())
    .RetryAsync(10, async (exception, retryCount) =>
    {
        await Console.Out.WriteLineAsync(exception.Message);
    }).ExecuteAsync(async () => await weatherAPI.Get());

8627361b2a0952eb4a6aa699ea29bdf0.png

2.依赖注入

更加方便的方式是使用依赖注入的方式,自动将Refit和Polly结合起来。

首先,引用Nuget包:

Refit.HttpClientFactory
Microsoft.Extensions.Http.Polly

然后,修改Startup.cs,注册RefitClient,并增加了超时和重试策略:

AsyncRetryPolicy<HttpResponseMessage> retryPolicy = HttpPolicyExtensions
    .HandleTransientHttpError()
    .Or<TimeoutRejectedException>() 
    .WaitAndRetryAsync(10, _ => TimeSpan.FromMilliseconds(5000));

AsyncTimeoutPolicy<HttpResponseMessage> timeoutPolicy = Policy
    .TimeoutAsync<HttpResponseMessage>(TimeSpan.FromMilliseconds(30000));

services.AddRefitClient<IWeatherAPI>()
        .ConfigureHttpClient(c => c.BaseAddress = new Uri("http://localhost:5000"))
    .AddPolicyHandler(retryPolicy)
    .AddPolicyHandler(timeoutPolicy);

最后,直接使用IWeatherAPI:

private readonly IWeatherAPI _weatherAPI;

public WeatherForecastController(IWeatherAPI weatherAPI)
{
    _weatherAPI = weatherAPI;
}

[HttpGet]
public async Task<IEnumerable<WeatherForecast>> Get()
{
    var weatherForeCasts = await _weatherAPI.Get();

    return weatherForeCasts;
}

结论

今天,我们介绍了2种Refit结合Polly访问ASP.NET Core Web API的方法。推荐使用依赖注入方式,简化Refit集成Polly的操作。

如果你觉得这篇文章对你有所启发,请关注我的个人公众号”My IO“

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值