Asp .Net Core 系列:集成 Refit 和 RestEase 声明式 HTTP 客户端库

背景

.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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/806253.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

神经网络与深度学习(三)

文章目录 一、VGG-161.1结构组成1.2应用场景1.3简单例子 二、残差网络2.1非残差网络的缺陷2.2梯度消失原因2.3残差网络的优势2.4简单例子 三、常用数据集3.1MNIST3.2Fashion-MNIST数据集3.3CIFAR 10数据集3.4PASCAL VOC数据集3.5MS COCO数据集3.6ImageNet数据集与ILSVRC 一、VG…

基于springboot实现宠物咖啡馆平台管理系统项目【项目源码+论文说明】计算机毕业设计

基于springboot实现宠物咖啡馆平台演示 摘要 随着信息技术在管理上越来越深入而广泛的应用&#xff0c;管理信息系统的实施在技术上已逐步成熟。本文介绍了基于Spring Boot的宠物咖啡馆平台的设计与实现的开发全过程。通过分析基于Spring Boot的宠物咖啡馆平台的设计与实现管理…

ExoPlayer停止更新,建议升级到AndroidX Media3

1. 大家常用的ExoPlayer地址&#xff1a;GitHub - google/ExoPlayer: An extensible media player for Android ExoPlayer是谷歌官方提供的媒体播放库&#xff0c;大家在开发项目中经常使用ExoPlayer播放音视频&#xff0c;谷歌官方已经明确表示该库在2024-04-03停止更新&…

【图论】详解链式前向星存图法+遍历法

细说链式前向星存图法 首先要明白&#xff0c;链式前向星的原理是利用存边来进行模拟图。 推荐左神的视频–建图、链式前向星、拓扑排序 比方说有这样一张图&#xff0c;我们用链式前向星来进行模拟时&#xff0c;可以将每一条边都进行编号&#xff0c;其中&#xff0c;红色的…

MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书)

MAC: 自己制作https的ssl证书(自己签发免费ssl证书)(OPENSSL生成SSL自签证书) 前言 现在https大行其道, ssl又是必不可少的环节. 今天就教大家用开源工具openssl自己生成ssl证书的文件和私钥 环境 MAC电脑 openssl工具自行搜索安装 正文 1、终端执行命令 //生成rsa私钥&…

实战自动化修改主机名

一、主程序 #!/bin/bash# 设置主机名为node01 set_hostname() {local new_hostname$1echo "正在设置主机名为 $new_hostname ..."# 使用hostnamectl设置主机名hostnamectl set-hostname $new_hostname# 检查主机名是否更改成功if [ "$(hostname)" "…

自动化 单元测试Test

XCTest测试框架(单元测试XCTests、性能测试XCPPerformanceTests、用户界面测试XCUItests) 单元测试XCTests&#xff1a;测试应用中事件或逻辑是否预期工作。 用户界面测试XCUItests&#xff1a;测试用户与应用的UI交互(如点击按钮、滑动屏幕)。 性能测试XCPPerformanceTests&am…

云手机解决海外社媒运营的诸多挑战

随着海外社交媒体运营的兴起&#xff0c;如何有效管理多个账户成为了一项挑战。云手机作为一种新兴的解决方案&#xff0c;为海外社媒运营带来了前所未有的便利。 云手机的基本原理是基于云计算和虚拟化技术&#xff0c;允许用户在物理手机之外创建和使用多个虚拟手机。这种创新…

校园论坛系统

文章目录 校园论坛系统一、项目演示二、项目介绍三、10000字论文参考四、系统部分功能截图五、部分代码展示六、底部获取项目和10000字论文参考&#xff08;9.9&#xffe5;&#xff09; 校园论坛系统 一、项目演示 校园论坛系统 二、项目介绍 基于springbootvue的前后端分离…

SpringBoot3 + uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作(最新)

SpringBoot3 uniapp 对接 阿里云0SS 实现上传图片视频到 0SS 以及 0SS 里删除图片视频的操作 最终效果图uniapp 的源码UpLoadFile.vuedeleteOssFile.jshttp.js SpringBoot3 的源码FileUploadController.javaAliOssUtil.java 最终效果图 uniapp 的源码 UpLoadFile.vue <tem…

tp6 mongodb简单的增删改查

controller/mongo.php <?phpnamespace app\controller; use think\facade\Db; class Mongo {/*** 插入数据* */public function insert(){// 插入数据$data [name > zhangsan,email > zhangsanexample.com,children > [_id > 1,name > "Child 2&qu…

AI大模型引领未来智慧科研暨ChatGPT自然科学高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮&#xff0c;可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

starrocks的fe节点启动不起来的解决办法

fe节点启动报错:Do not specify the helper node to FE itself. Please specify it to the existing running Leader or Follower FE at com.starrocks.StarRocksFE.main(StarRocksFE.java:68) [starrocks-fe.jar:?] Caused by: com.sleepycat.je.EnvironmentFailureExcepti…

智能学习新纪元:AI个性化教育平台的革命

在AI个性化教育平台的应用领域&#xff0c;即便是普通人也有多种创业机会。AI技术在教育中的应用正逐步扩展&#xff0c;不仅限于传统的教育内容提供&#xff0c;还包括个性化学习路径的设计、学习效果的评估、互动式学习体验的创造等。以下是几个具体的创业方向&#xff1a; …

FFmpeg 结合cut、ffprobe批量以JSON格式查看音视频信息,附带参数详细说明

背景&#xff1a;查看下面audio_info.txt文件中音频的时长等信息。 /data/htdocs/demo/GPT-SoVITS/GPT-SoVITS/output/ambor/slicer_opt/vocal_原音频.wav.reformatted.wav_10.wav_0000000000_0000280800_0.000-4.680.wav|slicer_opt|ZH|所以我们猜测这背后也是深渊教团在捣鬼…

机器学习实训 Day1

线性回归练习 Day1 手搓线性回归 随机初始数据 import numpy as np x np.array([56, 72, 69, 88, 102, 86, 76, 79, 94, 74]) y np.array([92, 102, 86, 110, 130, 99, 96, 102, 105, 92])from matplotlib import pyplot as plt # 内嵌显示 %matplotlib inlineplt.scatter…

设计模式——责任链模式13

责任链模式 每个流程或事物处理 像一个链表结构处理。场景由 多层部门审批&#xff0c;问题分级处理等。下面体现的是 不同难度的问题由不同人进行解决。 设计模式&#xff0c;一定要敲代码理解 传递问题实体 /*** author ggbond* date 2024年04月10日 07:48*/ public class…

三种排序和对数器

三种排序 选择排序 就是在数组选出最小的数放到第一个索引上&#xff0c;然后选出次最小的数放到第二个索引上&#xff0c;依此类推 :::info [ 5, 1 , 3 , 2 , 4 ]第一次从0~4索引选出最小的放到0索引 [ 1, 5 , 3 , 2 , 4 ]第二次从1~4索引选出最小的放到1索引 [ 1 ,2 , 5 , 3…

数据结构-----链表

目录 1.顺序表经典算法 &#xff08;1&#xff09;移除元素 &#xff08;2&#xff09;合并数组 2.链表的创建 &#xff08;1&#xff09;准备工作 &#xff08;2&#xff09;建结构体 &#xff08;3&#xff09;链表打印 &#xff08;4&#xff09;尾插数据 &#xff…

【unity】【C#】UGUI组件

文章目录 UI是什么对UI初步认识 UI是什么 UI是用户界面&#xff08;User Interface&#xff09;的缩写&#xff0c;它是用户与软件或系统进行交互的界面。UI设计旨在提供用户友好的界面&#xff0c;使用户能够轻松地使用软件或系统。UI设计包括界面的布局、颜色、字体、图标等…