背景

.NET 中 有没有类似 Java 中 Feign 这样的框架?经过查找和实验,发现 在 .NET 平台上,虽然没有直接的 Feign 框架的端口,但是有一些类似的框架和库,它们提供了类似的功能和设计理念。下面是一些在 .NET 中用于声明式 HTTP 客户端的框架和库:

  1. Refit:

    Refit 是一个用于构建声明式、类型安全的 HTTP 客户端的库。它允许您通过定义接口来描述 HTTP API,并生成客户端代码。Refit 使用属性路由的方式定义 API 调用,类似于 Feign。它支持各种 HTTP 方法,如 GET、POST、PUT、DELETE 等,并支持异步操作。

    https://github.com/reactiveui/refit
  2. RestEase:

    RestEase 也是一个用于创建类型安全的 HTTP 客户端的库。它提供了类似于 Refit 的声明式 API 定义方式,允许您通过编写接口来描述 HTTP API。RestEase 支持各种 HTTP 方法,并提供了简单易用的 fluent API。

    https://github.com/canton7/RestEase
  3. 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 客户端库的更多相关文章

  1. asp.net core 系列 18 web服务器实现

    一. ASP.NET Core Module 在介绍ASP.NET Core Web实现之前,先来了解下ASP.NET Core Module.该模块是插入 IIS 管道的本机 IIS 模块(本机是指 ...

  2. asp.net core 系列 16 Web主机 IWebHostBuilder

    一.概述 在asp.net core中,Host主机负责应用程序启动和生存期管理.host主机包括Web 主机(IWebHostBuilder)和通用主机(IHostBuilder).Web 主机是适 ...

  3. Asp.net Core 系列之--5.认证、授权与自定义权限的实现

    ChuanGoing 2019-11-24 asp.net core系列已经来到了第五篇,通过之前的基础介绍,我们了解了事件订阅/发布的eventbus整个流程,初探dapper ORM实现,并且简单 ...

  4. 【目录】asp.net core系列篇

    随笔分类 - asp.net core系列篇 asp.net core系列 68 Filter管道过滤器 摘要: 一.概述 本篇详细了解一下asp.net core filters,filter叫&q ...

  5. asp.net core系列 53 IdentityServer4 (IS4)介绍

    一.概述 在物理层之间相互通信必须保护资源,需要实现身份验证和授权,通常针对同一个用户存储.对于资源安全设计包括二个部分,一个是认证,一个是API访问. 1 认证 认证是指:应用程序需要知道当前用户的 ...

  6. 在 ASP.NET Core 中集成 Skywalking APM

    前言 大家好,今天给大家介绍一下如何在 ASP.NET Core 项目中集成 Skywalking,Skywalking 是 Apache 基金会下面的一个开源 APM 项目,有些同学可能会 APM ...

  7. 1.1专题介绍「深入浅出ASP.NET Core系列」

    大家好,我是IT人张飞洪,专注于.NET平台十年有余. 工作之余喜欢阅读和写作,学习的内容包括数据结构/算法.网络技术.Linux系统原理.数据库技术原理,设计模式.前沿架构.微服务.容器技术等等…… ...

  8. asp.net core系列 30 EF管理数据库架构--必备知识 迁移

    一.管理数据库架构概述 EF Core 提供两种主要方法来保持 EF Core 模型和数据库架构同步.一是以 EF Core 模型为基准,二是以数据库为基准. (1)如果希望以 EF Core 模型为 ...

  9. asp.net core系列 40 Web 应用MVC 介绍与详细示例

    一. MVC介绍 MVC架构模式有助于实现关注点分离.视图和控制器均依赖于模型. 但是,模型既不依赖于视图,也不依赖于控制器. 这是分离的一个关键优势. 这种分离允许模型独立于可视化展示进行构建和测试 ...

  10. asp.net core系列 39 Web 应用Razor 介绍与详细示例

    一. Razor介绍 在使用ASP.NET Core Web开发时, ASP.NET Core MVC 提供了一个新特性Razor. 这样开发Web包括了MVC框架和Razor框架.对于Razor来说 ...

随机推荐

  1. Java 递归方法的使用 + 例子

    1 /* 2 * 递归方法的使用 3 * 1.递归方法:一个方法体内调用它自身 4 * 2.方法递归包含了一种隐式的循环,它会重复执行某段代码,但这种重复执行无须循环控制 5 * 递归一定要想已知方向 ...

  2. Java面经知识点图谱总结

    未完待续~~~

  3. Spring事务(四)-事务失效场景

    有时候,我们明明在类或者方法上添加了@Transactional注解,却发现方法并没有按事务处理.其实,以下场景会导致事务失效. 1.事务方法所在的类没有加载到Spring IOC容器中. Sprin ...

  4. stm32读写sd卡代码解析和调试总结

    一 前言   做程序员真是来不得半点偷懒,假如你对经常使用的代码不熟悉,早晚会让你付出沉重的代价.像认识自己的灵魂一样认识每行用到的代码,这才是一个合格的程序员,才不至于在出现问题的时候出现慌乱.   ...

  5. 可穿戴设备主控制器芯片AMA3B 源码解析之初体验

    一 背景和缘由   现在的mcu非常多,在超低功耗mcu这块,能赢得市场穿戴式设备使用的产品的确不多,以前是的是stm32 L系列,可是,随着L系列的缺货涨价和技术指标没有快速的发展,很多厂商都抛弃了 ...

  6. 从零开始写 Docker(六)---实现 mydocker run -v 支持数据卷挂载

    本文为从零开始写 Docker 系列第六篇,实现类似 docker -v 的功能,通过挂载数据卷将容器中部分数据持久化到宿主机. 完整代码见:https://github.com/lixd/mydoc ...

  7. linux怎么添加用户

    在Linux中添加普通新用户 超级用户(也称为"root")是一个具有修改系统中任何文件权力的特别账号.在日常工作中,最好不要使用超级用户账号进入系统,因为任何错误操作都可能导致巨 ...

  8. 瑞云科技联合飞蝶VR教育、大朋VR推出元宇宙 5G VR智慧教育整体解决方案

    近日,瑞云科技3DCAT实时渲染云与飞蝶VR.大朋VR达成深度合作.基于瑞云深度自研的实时渲染云技术.飞蝶VR教育内容资源的深厚积累以及大朋VR优秀的VR硬件产品力,三方针对元宇宙 5G VR智慧教育 ...

  9. Linux输入输出

    1.重定向概述 1.什么是重定向 将原本要输出到屏幕的数据信息,重新定向到某个指定的文件中.比如:每天凌晨定时备份数据,希望将备份数据的结果保存到某个文件中. 这样第二天通过查看文件的内容就知道昨天备 ...

  10. 记录--在Vue3这样子写页面更快更高效

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 前言 在开发管理后台过程中,一定会遇到不少了增删改查页面,而这些页面的逻辑大多都是相同的,如获取列表数据,分页,筛选功能这些基本功能.而不 ...