翼度科技»论坛 编程开发 .net 查看内容

MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接

7

主题

7

帖子

21

积分

新手上路

Rank: 1

积分
21
源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

1.ServiceBase

1.AutoMapRoute

源码如下:

AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。
比如上文的一个方法:
  1. public async Task<WeatherForecast[]> PostWeather() {
  2.             return null;
  3.         }
复制代码
MinimalAPI会帮我们生成一个Post 的Weather接口,接口地址:
  1. http://localhost:5187/api/v1/Users/Weather
复制代码
2.ParseMethod

ParseMethod方法代码:

methodName 是方法名。PostWeather方法帮我们解析方法名中的关键信息生成对应请求类型。
3. ParseMethodPrefix

ParseMethodPrefix源码:

ParseMethodPrefix 用于判断自定义的方法前缀。
4.ServiceGlobalRouteOptions

ServiceGlobalRouteOptions源码:

ServiceGlobalRouteOptions配置方法前缀。
例如 方法前缀是Find,这个方法就会被解析成get请求。
注意:PostWeather 会生成 /api/v1/Users/Weather 。就是根据ServiceGlobalRouteOptions配置的。
5.关闭自动创建接口 AutoMapRoute

在构造函数中加入
  1. RouteOptions.DisableAutoMapRoute = true;
复制代码
禁用AutoMapRoute

禁用后swagger:

可以看到,禁用后,swagger就只有我们通过App.MapGet创建的接口了。
MASA minimalAPI 官方文档

原始用法:
  1. var builder = WebApplication.CreateBuilder(args);
  2. var app = builder.Build();
  3. app.MapGet("/api/v1/Demo/HelloWorld", () => "Hello World");
  4. app.Run();
复制代码
用例:
  1. Install-Package Masa.Contrib.Service.MinimalAPIs
复制代码

  • 添加MinimalAPI
  1. var builder = WebApplication.CreateBuilder(args);
  2. var app = builder.Services.AddServices(builder);
复制代码

  • 自定义Service并继承ServiceBase,如:
  1. public class DemoService : ServiceBase
  2. {
  3.     public string HelloWorld()
  4.     {
  5.         return "Hello World";
  6.     }
  7. }
复制代码
提示:继承ServiceBase的服务为单例模式注册,如果需要从DI获取获取
  1. public async Task DeleteBasketByIdAsync(string id, [FromServices] IBasketRepository repository)
  2. {
  3.     await repository.DeleteBasketAsync(id);
  4. }
复制代码
阅读如遇样式问题,请前往个人博客浏览: https://note.raokun.top

拥抱ChatGPT,国内访问网站:https://ai.firstsaofan.top

开源项目地址:https://github.com/firstsaofan/TerraMours


来源:https://www.cnblogs.com/raok/archive/2023/05/05/17374885.html
免责声明:由于采集信息均来自互联网,如果侵犯了您的权益,请联系我们【E-Mail:cb@itdo.tech】 我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x

上一篇: C# 串口通信

下一篇: 通用的CRUD之LiteDB

举报 回复 使用道具