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

masa,minimalapi,源码,解析,为什么,我们,一个,app,mapget,生成,三个,接口 · 浏览次数 : 146

小编点评

代码解析中关于自动创建接口的代码主要位于`MinimalAPI`类中的`AutoMapRoute`方法中: ```C# public async Task<WeatherForecast[]> PostWeather() { return null; } ``` 该方法用于创建 `Weather` 接口,接口地址为 `http://localhost:5187/api/v1/Users/Weather2.ParseMethodParseMethod`。 通过分析代码,我们可以得出以下原因: 1. **`AutoMapRoute` 是一个自动创建接口的辅助类。** 当我们使用 `MapGet` 方法创建接口时,`AutoMapRoute` 会自动生成一个接口,并为其配置 `RouteOptions`。 2. **`MinimalAPI` 类中的`AutoMapRoute` 方法会根据方法的名称创建相应的 API 接口。** 对于 `PostWeather` 方法,`AutoMapRoute` 会生成一个名为 `Weather` 的 API 接口,接口地址为 `http://localhost:5187/api/v1/Users/Weather2.ParseMethodParseMethod`。 3. **`PostWeather` 方法中没有指定 `RouteOptions`,** 这意味着 `AutoMapRoute` 默认使用 `RouteOptions.DisableAutoMapRoute` 设置的默认值 `true`。这意味着该接口不会被自动创建。 因此,我们最终只写了一个 `app.MapGet` 方法,却生成了三个接口:`Weather`, `Weather2` 和 `Weather3`。这是因为 `AutoMapRoute` 在创建接口时根据方法名称自动生成多个接口,并为其配置了相应的 `RouteOptions`。

正文

源码解析:为什么我们只写了一个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://www.raokun.top
拥抱ChatGPT,国内访问网站:https://ai.terramours.site
开源项目地址:https://github.com/firstsaofan/TerraMours

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

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

源码解析:为什么我们只写了一个app.MapGet,却生成了三个接口 1.ServiceBase 1.AutoMapRoute 源码如下: AutoMapRoute自动创建map路由,MinimalAPI会根据service中的方法,创建对应的api接口。 比如上文的一个方法: public asy

MASAMinimalAPI:创建MinimalAPI项目

项目准备 1.创建项目,选择webapi。取消勾选使用控制器。创建minimal Api项目 2.创建成功后MinimalAPI的接口直接写在program.cs中 3.引入nuget包:Masa.Contrib.Service.MinimalAPIs MinimalAPI改造 1. 在progra

如何使用MASA.Blazor

MASA.Blazor 是什么? 基于Material Design设计和BlazorComponent的交互能力提供标准的基础组件库。提供如布局、弹框标准、Loading、全局异常处理等标准场景的预置组件。从更多实际场景出发,满足更多用户和场景的需求,缩短开发周期,提高开发效率,并提供一整套Web

学习MASA第一天:MASA Blazor TEST项目创建

学习MASA第一天:MASA Blazor TEST项目创建 从今天开始,学习MASA框架,目标是基于MASA做一套开源项目。 第一天,从下载源码开始![443684122256924] 我们今天先把框架源码下载下来,以便后面每天的学习和对照。 源码地址:Masa.Blazor 源码我们后面再看,先

学习MASA第二天:框架分析

学习MASA第二天:框架分析 今天主要是看了下 MASA Team 的github,目的是对未来设计开源框架选型。对于目前比较火的国内masa framework。当然是首当其冲是要用一用的。 masa framework 地址:MASA.Framework 构思开源框架可行性方案 目前看,用mas

如何在现有项目中使用`Masa MiniApi`?

首先我们现有创建一个空的WebApi的项目模板,这个项目模板和MasaFramework本身没有任何关联,我们本博客只是使用的MasaFramework的MiniApi的包 创建Asp.NET Core 空的项目模板 项目名称MFMiniApi 其他信息看图,取消Https配置,也可以选择, 这就是

(2)MasaFramework入门第二篇,安装MasaFramework了解各个模板

安装MasaFramework模板 执行以下命令安装最新Masa的模板 dotnet new --install Masa.Template 安装完成将出现四个模板 Masa Blazor App: Masa Blazor App的模板创建的是一个没有携带解决方案的项目模板,默认项目结构如图: 一个

(3) MasaFramework 入门第三篇,使用MasaFramework

首先我们需要创建一个MasaFramework模板的项目,项目名称TokenDemo,项目类型如图所示 删除Web/TokenDemo.Admin项目,新建Masa Blazor Pro项目模板 项目,项目位置在src/Web项目 项目类型选择ServerAndWasm,为了让我们支持俩种模式 创建

在Winform中一分钟入门使用好看性能还好的Blazor Hybrid

# 在Winform中一分钟入门使用好看性能还好的Blazor Hybrid ## 安装模板 ```shell dotnet new install Masa.Template::1.0.0-rc.2 ``` ## 创建 Winform的Blazor Hybrid项目 ```shell dotnet

您是否也有想在浏览器中实时的编辑代码并且渲染的想法?

不知道是否有人跟我一样想在浏览器上直接可以动态的编译blazor的一些组件库?而不是通过引用NuGet以后才能查看到效果,并且在使用别人的组件的时候可以在动态的调整组件的一些样式 不说了开始正文: 本文我们将使用Masa提供的一个组件实现动态编译github.com直通车 ,执行环境将在WebAss