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

AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。
比如上文的一个方法:
public async Task<WeatherForecast[]> PostWeather() {
return null;
}
MinimalAPI会帮我们生成一个Post 的Weather接口,接口地址:
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
在构造函数中加入
RouteOptions.DisableAutoMapRoute = true;
禁用AutoMapRoute

禁用后swagger:

可以看到,禁用后,swagger就只有我们通过App.MapGet创建的接口了。
MASA minimalAPI 官方文档
原始用法:
var builder = WebApplication.CreateBuilder(args);
var app = builder.Build();
app.MapGet("/api/v1/Demo/HelloWorld", () => "Hello World");
app.Run();
用例:
Install-Package Masa.Contrib.Service.MinimalAPIs
- 添加MinimalAPI
var builder = WebApplication.CreateBuilder(args);
var app = builder.Services.AddServices(builder);
- 自定义Service并继承ServiceBase,如:
public class DemoService : ServiceBase
{
public string HelloWorld()
{
return "Hello World";
}
}
提示:继承ServiceBase的服务为单例模式注册,如果需要从DI获取获取
public async Task DeleteBasketByIdAsync(string id, [FromServices] IBasketRepository repository)
{
await repository.DeleteBasketAsync(id);
}
阅读如遇样式问题,请前往个人博客浏览: https://note.raokun.top
拥抱ChatGPT,国内访问网站:https://ai.firstsaofan.top
开源项目地址:https://github.com/firstsaofan/TerraMours
MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口的更多相关文章
- ReentrantLock源码解析——虽众但写
在看这篇文章时,笔者默认你已经看过AQS或者已经初步的了解AQS的内部过程. 先简单介绍一下ReentantLock,跟synchronized相同,是可重入的重量级锁.但是其用法则相当不同,首先 ...
- flask源码解析之上下文
引入 对于flask而言,其请求过程与django有着截然不同的流程.在django中是将请求一步步封装最终传入视图函数的参数中,但是在flask中,视图函数中并没有请求参数,而是将请求通过上下文机制 ...
- Java ThreadLocal 的使用与源码解析
GitHub Page: http://blog.cloudli.top/posts/Java-ThreadLocal-的使用与源码解析/ ThreadLocal 主要解决的是每个线程绑定自己的值,可 ...
- jQuery 源码解析二:jQuery.fn.extend=jQuery.extend 方法探究
终于动笔开始 jQuery 源码解析第二篇,写文章还真是有难度,要把自已懂的表述清楚,要让别人听懂真的不是一见易事. 在 jQuery 源码解析一:jQuery 类库整体架构设计解析 一文,大致描述了 ...
- Gin框架源码解析
Gin框架源码解析 Gin框架是golang的一个常用的web框架,最近一个项目中需要使用到它,所以对这个框架进行了学习.gin包非常短小精悍,不过主要包含的路由,中间件,日志都有了.我们可以追着代码 ...
- mybatis源码解析2---SqlSessionFactoryBuilder、SqlSessionFactory解析
1.先看一个mybatis最简单的Demo String resource = "mybatis-config.xml"; //1.流形式读取mybatis配置文件 InputSt ...
- Activity源码解析 - 读书笔记
1. Activity启动 Activity是一个比较好的模板方法模式.在Android系统启动时,第一个启动的进程是zygote进程,然后由zygote启动SystemServer,再后就是启动AW ...
- 【原】Android热更新开源项目Tinker源码解析系列之一:Dex热更新
[原]Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Tinker是微信的第一个开源项目,主要用于安卓应用bug的热修复和功能的迭代. Tinker github地址:http ...
- 多线程爬坑之路-Thread和Runable源码解析之基本方法的运用实例
前面的文章:多线程爬坑之路-学习多线程需要来了解哪些东西?(concurrent并发包的数据结构和线程池,Locks锁,Atomic原子类) 多线程爬坑之路-Thread和Runable源码解析 前面 ...
- Spring IoC源码解析——Bean的创建和初始化
Spring介绍 Spring(http://spring.io/)是一个轻量级的Java 开发框架,同时也是轻量级的IoC和AOP的容器框架,主要是针对JavaBean的生命周期进行管理的轻量级容器 ...
随机推荐
- .net core 版本避坑 无法打开项目文件。 无法找到 .NET SDK。请检查确保已安装此项且 global.json 中指定的版本(如有)与所安装的版本相匹配。
打开项目根目录,输入 dotnet --version ,查看本机安装的最高版本的sdk: 如果源文件中存在global.json文件,直接打开修改即可: 不存在则接着在1步骤后输入: dotnet ...
- Class 'dmstr\web\AdminLteAsset' not found
Yii2出现 Class 'dmstr\web\AdminLteAsset' not found 报错 1.检查下是不是vendor从其他地方复制过来的 2.检查根目录composer.json 中 ...
- Leecode 1.两数之和(Java 哈希表)
想法: 1.哈希表hashmap 第一种方法:将数组中元素及其下标right都加入hashmap中,对于每个元素n下标left,在map中查找是否有target-n的元素,若有,则返回其下标right ...
- loadrunner添加/清除 cookies
web_add_cookie("reloadCount=1;domain={Host}"); 清除 cookies web_cleanup_cookies():
- js实现切换页面清除定时器的函数
背景: 我在切换页面的时候,发现切换回原来的页面,定时器会叠加而不会清除原来的定时器 解决方法: 1.定义全局变量,通过js遍历清除(不会用,但性能好) var pageTimer = {} ; // ...
- 对于Python中RawString的理解(引用)
对于Python中RawString的理解 总结 1.'''作用: 可以表示 "多行注释" ."多行字符串" ."其内的单双引号不转义" 2 ...
- 惰性载入(函数)-跟JS性能有关的思想
一.惰性载入概念: 惰性.懒惰.其实跟懒惰没有关系,就是图省事,把没意义的事少做.不做. 惰性载入函数:函数执行时会根据不同的判断分支最终选择合适的方案执行,但这样的分支判断仅会发生一次,后面的其他同 ...
- C++ accumulate()函数的用法
accumulate定义在 numeric 中,作用有两个,一个是累加求和,另一个是自定义类型数据的处理. 头文件 #include <numeric> 原型 默认求累加和 templat ...
- java8-并行计算
java8提供一个fork/join framework,fork/join框架是ExecutorService接口的一个实现,它可以帮助你充分利用你电脑中的多核处理器,它的设计理念是将一个任务分割成 ...
- ICSFUZZ:操纵I/O、二进制代码重用以及插桩,来Fuzzing工业控制应用程序
本文系原创,转载请说明出处 Please Subscribe Wechat Official Account:信安科研人,获取更多的原创安全资讯 源码:GitHub - momalab/ICSFu ...