首页 > 编程语言 >MASA MinimalAPI源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口

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

时间:2023-05-05 17:47:14浏览次数:54  
标签:MapGet MASA MinimalAPI app 接口 源码 builder

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

1.ServiceBase

1.AutoMapRoute

源码如下:

image-1683277238491

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方法代码:

image-1683277247813

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

3. ParseMethodPrefix

ParseMethodPrefix源码:

image-1683277257625

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

4.ServiceGlobalRouteOptions

ServiceGlobalRouteOptions源码:

image-1683277265824

ServiceGlobalRouteOptions配置方法前缀。

例如 方法前缀是Find,这个方法就会被解析成get请求。

注意:PostWeather 会生成 /api/v1/Users/Weather 。就是根据ServiceGlobalRouteOptions配置的。

5.关闭自动创建接口 AutoMapRoute

在构造函数中加入

RouteOptions.DisableAutoMapRoute = true;

禁用AutoMapRoute

image-1683277276893

禁用后swagger:

image-1683277284836

可以看到,禁用后,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
  1. 添加MinimalAPI
var builder = WebApplication.CreateBuilder(args);
var app = builder.Services.AddServices(builder);
  1. 自定义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

标签:MapGet,MASA,MinimalAPI,app,接口,源码,builder
From: https://www.cnblogs.com/raok/p/17374885.html

相关文章

  • MASAMinimalAPI:创建MinimalAPI项目
    项目准备1.创建项目,选择webapi。取消勾选使用控制器。创建minimalApi项目2.创建成功后MinimalAPI的接口直接写在program.cs中3.引入nuget包:Masa.Contrib.Service.MinimalAPIsMinimalAPI改造1.在program.cs中加入以下内容将原有的varapp=builder.Build();换成var......
  • Fart脱壳-源码分析
    源码分析首先看java代码,在APP启动时候反射了DexFile.java中三个方法,分别是getClassNameListdefineClassNativedumpMethodCode其中前面两个方法是android自带的,dumpMethodCode方法是fart自己添加的//frameworks/base/core/java/android/app/ActivityThread.java......
  • 从源码深入理解读写锁(golang-RWMutex)
    环境:go1.19.8在读多写少的情况下,即使一段时间内没有写操作,大量并发的读访问也不得不在Mutex的保护下变成串行访问,这种情况下,使用Mutex,对性能影响比较大。所以就要区分读写操作。如果某个读操作的g持有了锁,其他读操作的g就不必等待了,可以并发的访问共享变量,这样就可以将串行的......
  • OpenHarmony 资源调度之智能感知调度源码分析
    作者:张守忠1WPA_supplicant简介WPA是WiFiProtectedAccess的缩写,中文含义为“WiFi网络安全存取”。WPA是一种基于标准的可互操作的WLAN安全性增强解决方案,可大大增强现有以及未来无线局域网络的数据保护和访问控制水平。wpa_supplicant是开源项目源码,支持Linux,Windows以及很多......
  • Opal 教程之二 SipIM 例子源码分析
    在互联网上.极少有关于Opal的中文教程.因此敝人决定把学习Opal的过程记录下来勉励自己.抑或给后来者留下一些入门的资料.最近感觉学习Opal已经慢慢摸出了门道.前几个星期.摸索在VS2005编译Opal花了我好多天的时间.把我的耐心都磨得差不多快要放弃研究Opal.作为初学者.学习的难度......
  • java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,附源码+
    1、项目介绍java基于springboot+vue的宿舍管理系统、学生宿舍管理系统、高校宿舍管理系统,实现管理员:首页、个人中心、公告信息管理、院系管理、班级管理、学生管理、宿舍信息管理、宿舍安排管理、卫生检查管理、报修信息管理、报修处理管理、缴费信息管理,学生;首页、个人中心、公......
  • Spring源码:Bean生命周期(三)
    前言在之前的文章中,我们已经对bean的准备工作进行了讲解,包括bean定义和FactoryBean判断等。在这个基础上,我们可以更加深入地理解getBean方法的实现逻辑,并在后续的学习中更好地掌握createBean方法的实现细节。getBean用法讲解getBean方法之前,我们先来看看他有几种常见......
  • STL源码分析读书笔记
    主要是关于标准库容器的整理空间配置器主要看SGI的实现,有两个空间配置器_malloc_alloc_template<0>__default_alloc_template<...>用户可以选择单独使用第一个分配器,或者一起使用两个分配器。当用户选择使用两个分配器时,编译器会分别将上述两个分配器typedef成malloc_a......
  • springboot 分析源码欢迎页和图标-> thymeleaf模板引擎常用语法->扩展
    欢迎页: icon: 注意点: thymeleaf模板引擎1.使用thymeleaf模板引擎前要导入对应依赖包2.阅读源码:根据源码说明我们可以将html文件放置在templates目录下,然后通过controller进行跳转即可 controller类://在templates下的东西需要通过controller类来跳转,//需要导入......
  • 从案例中详解go-errgroup-源码
    一、背景某次会议上发表了errorgroup包,一个g失败,其他的g会同时失败的错误言论(看了一下源码中的一句话Thefirstcalltoreturnanon-nilerrorcancelsthegroup,没进一步看其他源码,片面理解了)。//Thefirstcalltoreturnanon-nilerrorcancelsthegroup'scontext......