Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库
背景
.NET 中 有没有类似 Java 中 Feign 这样的框架?经过查找和实验,发现 在 .NET 平台上,虽然没有直接的 Feign 框架的端口,但是有一些类似的框架和库,它们提供了类似的功能和设计理念。下面是一些在 .NET 中用于声明式 HTTP 客户端的框架和库:
- Refit:
Refit 是一个用于构建声明式、类型安全的 HTTP 客户端的库。它允许您通过定义接口来描述 HTTP API,并生成客户端代码。Refit 使用属性路由的方式定义 API 调用,类似于 Feign。它支持各种 HTTP 方法,如 GET、POST、PUT、DELETE 等,并支持异步操作。
https://github.com/reactiveui/refit - RestEase:
RestEase 也是一个用于创建类型安全的 HTTP 客户端的库。它提供了类似于 Refit 的声明式 API 定义方式,允许您通过编写接口来描述 HTTP API。RestEase 支持各种 HTTP 方法,并提供了简单易用的 fluent API。
https://github.com/canton7/RestEase - Feign.net
feign.net 是一个基于 .NET Standard 2.0 的库,它实现了与 Feign 类似的接口定义和调用方式。feign.net 支持异步操作,并提供了与 Refit 和 RestEase 类似的特性。
https://github.com/daixinkai/feign.net
集成 Refit
要在 ASP.NET Core 中集成 Refit,首先需要安装 Refit 包。可以通过 NuGet 包管理器或者 .NET CLI 来完成:
dotnet add package Refit
接下来,您可以创建一个接口,用于定义对远程 API 的调用。例如:
using Microsoft.AspNetCore.Mvc;
using Refit;
using RefitDemo.Models;
namespace RefitDemo.WebApi
{
public interface IWeatherForecastApi
{
[Get("/WeatherForecast/Get")]
Task<string> GetWeatherForecast(string id);
[Post("/WeatherForecast/Post")]
Task<WeatherForecast> PostWeatherForecast(WeatherForecast weatherForecast);
}
}
然后,您可以在 ASP.NET Core 应用程序中使用 Refit 客户端。一种常见的方法是将其注入到服务中,以便在需要时进行使用。例如,在 Startup.cs 中配置:
builder.Services.AddRefitClient<IWeatherForecastApi>(new RefitSettings
{
ContentSerializer = new NewtonsoftJsonContentSerializer(
new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
}
)
}).ConfigureHttpClient(c => c.BaseAddress = new Uri("http://localhost:5237"));
//封装
builder.Services.AddRefitClients("RefitDemo.WebApi", "http://localhost:5237");
public static class RefitExtensions
{
public static void AddRefitClients(this IServiceCollection services, string targetNamespace, string baseAddress, RefitSettings? refitSettings = null)
{
// 获取指定命名空间中的所有类型
var types = Assembly.GetExecutingAssembly().GetTypes()
.Where(t => t.Namespace == targetNamespace && t.IsInterface).ToList();
foreach (var type in types)
{
services.AddRefitClient(type, refitSettings).ConfigureHttpClient(c => c.BaseAddress = new Uri(baseAddress));
}
}
}
最后,您可以在需要使用 API 客户端的地方注入 IWeatherForecastApi 接口,并使用它来调用远程 API:
using Microsoft.AspNetCore.Mvc;
using RefitDemo.WebApi;
namespace RefitDemo.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;
private readonly IWeatherForecastApi _weatherForecastApi;
public WeatherForecastController(ILogger<WeatherForecastController> logger, IWeatherForecastApi weatherForecastApi)
{
_logger = logger;
_weatherForecastApi = weatherForecastApi;
}
[HttpGet("GetWeatherForecast")]
public async Task<string> GetWeatherForecast()
{
return await _weatherForecastApi.GetWeatherForecast("1111");
}
[HttpGet("PostWeatherForecast")]
public async Task<WeatherForecast> PostWeatherForecast()
{
return await _weatherForecastApi.PostWeatherForecast(new WeatherForecast { Date = DateOnly.MaxValue,Summary = "1111" });
}
[HttpGet("Get")]
public string Get(string id)
{
return id;
}
[HttpPost("Post")]
public WeatherForecast Post(WeatherForecast weatherForecast)
{
return weatherForecast;
}
}
}

其它功能:https://github.com/reactiveui/refit?tab=readme-ov-file#table-of-contents
集成 RestEase
要在 ASP.NET Core 中集成 RestEase,首先需要安装 RestEase 包。可以通过 NuGet 包管理器或者 .NET CLI 来完成:
dotnet add package RestEase
接下来,您可以创建一个接口,用于定义对远程 API 的调用。例如:
using Microsoft.AspNetCore.Mvc;
using RestEase;
using RestEaseDemo.Models;
namespace RestEaseDemo.WebApi
{
public interface IWeatherForecastApi
{
[Get("/WeatherForecast/Get")]
Task<string> GetWeatherForecast(string id);
[Post("/WeatherForecast/Post")]
Task<WeatherForecast> PostWeatherForecast(WeatherForecast weatherForecast);
}
}
然后,您可以在 ASP.NET Core 应用程序中使用 RestEase 客户端。一种常见的方法是将其注入到服务中,以便在需要时进行使用。例如,在 Startup.cs 中配置:
builder.Services.AddRestEaseClient<IWeatherForecastApi>("http://localhost:5252");
然后,您可以在 ASP.NET Core 应用程序中使用 RestEase 客户端。与 Refit 不同的是,RestEase 不需要额外的配置,您只需要直接使用接口即可。在需要使用 API 客户端的地方注入 IMyApi 接口,并使用它来调用远程 API:
using Microsoft.AspNetCore.Mvc;
using RestEaseDemo.WebApi;
namespace RestEaseDemo.Controllers
{
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
private readonly ILogger<WeatherForecastController> _logger;
private readonly IWeatherForecastApi _weatherForecastApi;
public WeatherForecastController(ILogger<WeatherForecastController> logger, IWeatherForecastApi weatherForecastApi)
{
_logger = logger;
_weatherForecastApi = weatherForecastApi;
}
[HttpGet("GetWeatherForecast")]
public async Task<string> GetWeatherForecast()
{
return await _weatherForecastApi.GetWeatherForecast("1111");
}
[HttpGet("PostWeatherForecast")]
public async Task<WeatherForecast> PostWeatherForecast()
{
return await _weatherForecastApi.PostWeatherForecast(new WeatherForecast { Date = DateOnly.MaxValue,Summary = "1111" });
}
[HttpGet("Get")]
public string Get(string id)
{
return id;
}
[HttpPost("Post")]
public WeatherForecast Post(WeatherForecast weatherForecast)
{
return weatherForecast;
}
}
}
其它功能:https://github.com/canton7/RestEase?tab=readme-ov-file#table-of-contents
Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库的更多相关文章
- asp.net core 系列 18 web服务器实现
一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...
- asp.net core 系列 16 Web主机 IWebHostBuilder
一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...
- Asp.net Core 系列之--5.认证、授权与自定义权限的实现
ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...
- 【目录】asp.net core系列篇
随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...
- asp.net core系列 53 IdentityServer4 (IS4)介绍
一.概述 在物理层之间相互通信必须保护资源,需要实现身份验证和授权,通常针对同一个用户存储.对于资源安全设计包括二个部分,一个是认证,一个是API访问. 1 认证 认证是指:应用程序需要知道当前用户的 ...
- 在 ASP.NET Core 中集成 Skywalking APM
前言 大家好,今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking,Skywalking 是 Apache 基金会下面的一个开源 APM 项目,有些同学可能会 APM ...
- 1.1专题介绍「深入浅出ASP.NET Core系列」
大家好,我是IT人张飞洪,专注于.NET平台十年有余. 工作之余喜欢阅读和写作,学习的内容包括数据结构/算法.网络技术.Linux系统原理.数据库技术原理,设计模式.前沿架构.微服务.容器技术等等…… ...
- asp.net core系列 30 EF管理数据库架构--必备知识 迁移
一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...
- asp.net core系列 40 Web 应用MVC 介绍与详细示例
一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...
- asp.net core系列 39 Web 应用Razor 介绍与详细示例
一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...
随机推荐
- 【Azure 应用服务】Storage Queue触发Azure Function时报错 The input is not a valid Base-64 string
问题描述 创建一个PowerShell脚本的Azure Function,触发方式为 Storage Queue.但执行函数结果一直失败 (Failed). 错误消息为: Executed 'Func ...
- 【Azure 环境】当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口?
问题描述 当本地网络通过ER专线与Azure云上多个虚拟网络打通,如何通过特定的网络策略来限制本地部分网段访问云上虚拟机22端口? 问题回答 根据文档调研,在ER线路服务的层面,是无法做网络策略来限制 ...
- gorm整理
目录 1. 约定 2. 结构体标签 3. 创建记录 4. 更新 5.删除 6. 查询 7.关联 8.链式操作 9.范围 10.多个立即执行方法的注意事项 11.错误处理 12.钩子 13.事务 14. ...
- Dungeon Master 题解
这道题的题意简单来说:就是在3D迷宫里找出口,也就是三维地图,需要用到三维数组 由于本人写代码极易出错,所以在输入三维数组的时候修改了c(column,即列)的值,重复定义了没看到==,后面改成定义成 ...
- 如何获取拼多多推流码并使用OBS进行直播-疯狂URL
简介 拼多多直播在PC端可以用多多视频|多多直播端进行开播,它的功能类似于常见的抖音直播助手和快手直播伴侣等等客户端.此教程测试时间 2023-7-12,第三方随时可能会升级,无法保证时效,建议不要升 ...
- 剑桥英英在线词典 - 可以查单词 可数-不可数 - 英语 a few/few/a little/little
There is _____ milk in a fridge. Let's go buy some. A. a few B. few C. a little D. little 解析:经典老知识点 ...
- 音标 重音 u 用 中文 吁 去记忆 骑马让马停下来的 吁 - 英语
音标 重音 u 用 中文 吁 去记忆 骑马让马停下来的 吁
- 让 js 失效 Chrome F12 右上角 settings - Preferences - Debugger - Disable JavaScript
说的可能比较长,实际上,F12 右上角 - 右小角 还是挺好找的.
- 让高清和流畅并存,3DCAT云看车技术领跑汽车行业
3DCAT实时云渲染平台在承接了奥迪大客户的项目后,将把一部分业务重心放到汽车行业,加大了研发力度和算力投入,细节决定成败,3DCAT的云看车高度还原了汽车每一种材质和纹理,逼真的视觉享受,让车主爱不 ...
- 在 PostgreSQL 中,解决图片二进制数据,由于bytea_output参数问题导致显示不正常的问题。
在 PostgreSQL 中,bytea_output 参数控制在查询结果中 bytea 类型的显示格式.默认情况下,bytea_output 的值为 hex,这意味着在查询结果中,bytea 类型的 ...