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

2023-11-05 21:38

本文主要是介绍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“

这篇关于Refit结合Polly访问ASP.NET Core Web API的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352666

相关文章

Knife4j+Axios+Redis前后端分离架构下的 API 管理与会话方案(最新推荐)

《Knife4j+Axios+Redis前后端分离架构下的API管理与会话方案(最新推荐)》本文主要介绍了Swagger与Knife4j的配置要点、前后端对接方法以及分布式Session实现原理,... 目录一、Swagger 与 Knife4j 的深度理解及配置要点Knife4j 配置关键要点1.Spri

Python中re模块结合正则表达式的实际应用案例

《Python中re模块结合正则表达式的实际应用案例》Python中的re模块是用于处理正则表达式的强大工具,正则表达式是一种用来匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,这篇文章主... 目录前言re模块常用函数一、查看文本中是否包含 A 或 B 字符串二、替换多个关键词为统一格式三、提

MySQL中的InnoDB单表访问过程

《MySQL中的InnoDB单表访问过程》:本文主要介绍MySQL中的InnoDB单表访问过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、背景2、环境3、访问类型【1】const【2】ref【3】ref_or_null【4】range【5】index【6】

解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题

《解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘问题》:本文主要介绍解决未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4... 目录未解析的依赖项:‘net.sf.json-lib:json-lib:jar:2.4‘打开pom.XM

前端如何通过nginx访问本地端口

《前端如何通过nginx访问本地端口》:本文主要介绍前端如何通过nginx访问本地端口的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、nginx安装1、下载(1)下载地址(2)系统选择(3)版本选择2、安装部署(1)解压(2)配置文件修改(3)启动(4)

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.

javax.net.ssl.SSLHandshakeException:异常原因及解决方案

《javax.net.ssl.SSLHandshakeException:异常原因及解决方案》javax.net.ssl.SSLHandshakeException是一个SSL握手异常,通常在建立SS... 目录报错原因在程序中绕过服务器的安全验证注意点最后多说一句报错原因一般出现这种问题是因为目标服务器

HTML5 getUserMedia API网页录音实现指南示例小结

《HTML5getUserMediaAPI网页录音实现指南示例小结》本教程将指导你如何利用这一API,结合WebAudioAPI,实现网页录音功能,从获取音频流到处理和保存录音,整个过程将逐步... 目录1. html5 getUserMedia API简介1.1 API概念与历史1.2 功能与优势1.3