首先我们现有创建一个空的WebApi的项目模板,这个项目模板和MasaFramework本身没有任何关联,我们本博客只是使用的MasaFrameworkMiniApi的包

  1. 创建Asp.NET Core 空的项目模板

  1. 项目名称MFMiniApi

  1. 其他信息看图,取消Https配置,也可以选择,

  1. 这就是一个空的项目模板

  2. 安装Masa MiniApi

    搜索Masa.Contrib.Service.MinimalAPIs ,请注意选择到包括发行版,由于1.0未发版,所以先用预览版

  1. 安装一下Swagger

    搜索Swashbuckle.AspNetCore安装

  2. 使用MasaMiniApi

    修改Program.cs代码

    using Microsoft.OpenApi.Models;
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddEndpointsApiExplorer();
    
    builder.Services.AddSwaggerGen(options =>
    {
    options.SwaggerDoc("v1", new OpenApiInfo { Title = "My API", Version = "v1" });
    }); var app = builder.AddServices(); app.UseSwagger();
    app.UseSwaggerUI(options =>
    {
    options.SwaggerEndpoint("/swagger/v1/swagger.json", "My API V1");
    }); await app.RunAsync();

    创建Service文件夹然后创建DemoService.cs

    内部代码:

    namespace MFMiniApi.Service;
    
    public class DemoService : ServiceBase
    {
    public string PostAsync()
    {
    return "成功了吗";
    }
    }
  3. 启动项目,通过MiniApi实现了注册Api服务

MasaMiniApi功能:

Minimal APIs十分轻量,写法十分简单,可正因为如此,也给我们带来一些编码上的问题,下面我们来看一下原生Minimal APIs的写法与Masa提供的Minimal APIs的写法的区别

原生写法

var builder = WebApplication.CreateBuilder(args);
var app = builder.Build(); app.MapGet("/api/v1/users/{id}", (Guid id)=>
{
// todo: 查询用户信息
var user = new User()
{
Id = id,
Name = "Tony"
};
return Task.FromResult(Results.Ok(user));
}); app.MapPost("/api/v1/users", ([FromBody] UserRequest request)=>
{
//todo: 添加用户逻辑
return Task.FromResult(Results.Accepted());
}); app.MapDelete("/api/v1/users/{id}",(Guid id)=>
{
//todo: 删除用户逻辑
return Task.FromResult(Results.Accepted());
}); app.MapPut("/api/v1/users/{id}",(Guid id, [FromBody] EditUserRequest request)=>
{
//todo: 修改用户逻辑
return Task.FromResult(Results.Accepted());
}); app.Run();

MasaMiniApi

创建UserService.cs,使用案例自动注册

using Microsoft.AspNetCore.Mvc;

namespace MFMiniApi.Service;

public class UserService : ServiceBase
{
/// <summary>
/// Get: /api/v1/users/{id}
/// </summary>
public Task<IResult> GetAsync(Guid id)
{
// todo: 查询用户信息
var user = new User()
{
Id = id,
Name = "Tony"
};
return Task.FromResult(Results.Ok(user));
} /// <summary>
/// Post: /api/v1/users
/// </summary>
public Task<IResult> AddAsync([FromBody] UserRequest request)
{
//todo: 添加用户逻辑
return Task.FromResult(Results.Accepted());
} /// <summary>
/// Delete: /api/v1/users/{id}
/// </summary>
public Task<IResult> DeleteAsync(Guid id)
{
//todo: 删除用户逻辑
return Task.FromResult(Results.Accepted());
} /// <summary>
/// Put: /api/v1/users/{id}
/// </summary>
public Task<IResult> UpdateAsync(Guid id, [FromBody] EditUserRequest request)
{
//todo: 修改用户逻辑
return Task.FromResult(Results.Accepted());
}
}

UserService.cs,使用案例手动注册

public class UserService : ServiceBase
{
public UserService()
{
RouteOptions.DisableAutoMapRoute = true;//当前服务禁用自动注册路由 App.MapGet("/api/v1/users/{id}", GetAsync);
App.MapPost("/api/v1/users", AddAsync);
App.MapDelete("/api/v1/users/{id}", DeleteAsync);
App.MapPut("/api/v1/users/{id}", UpdateAsync);
} public Task<IResult> GetAsync(Guid id)
{
// todo: 查询用户信息
var user = new User()
{
Id = id,
Name = "Tony"
};
return Task.FromResult(Results.Ok(user));
} public Task<IResult> AddAsync([FromBody] UserRequest request)
{
//todo: 添加用户逻辑
return Task.FromResult(Results.Accepted());
} public Task<IResult> DeleteAsync(Guid id)
{
//todo: 删除用户逻辑
return Task.FromResult(Results.Accepted());
} public Task<IResult> UpdateAsync(Guid id, [FromBody] EditUserRequest request)
{
//todo: 修改用户逻辑
return Task.FromResult(Results.Accepted());
}
}

MasaMiniApi全局配置

参数名 参数描述 默认值
DisableAutoMapRoute 禁用自动映射路由 false
Prefix 前缀 api
Version 版本 v1
AutoAppendId 路由中是否包含{Id}, 例如: /api/v1/user/ true
PluralizeServiceName 服务名称是否启用复数 true
GetPrefixes 用于识别当前方法类型为Get请求 new List<string> { "Get", "Select", "Find" }
PostPrefixes 用于识别当前方法类型为Post请求 new List<string> { "Post", "Add", "Upsert", "Create", "Insert" }
PutPrefixes 用于识别当前方法类型为Put请求 new List<string> { "Put", "Update", "Modify" }
DeletePrefixes 用于识别当前方法类型为Delete请求 new List<string> { "Delete", "Remove" }
DisableTrimMethodPrefix 禁用移除方法前缀(上方GetPostPutDelete请求的前缀) false
MapHttpMethodsForUnmatched 通过方法名前缀匹配请求方式失败后,路由将使用指定的HttpMethod发起请求 支持PostGetDeletePut 此方式Swagger不支持, 无法正常显示API
Assemblies 用于扫描服务所在的程序集 MasaApp.GetAssemblies()(全局Assembly集合,默认为当前域程序集集合)
RouteHandlerBuilder 基于RouteHandlerBuilder的委托,可用于权限认证、CORS null

服务内配置

参数名 参数描述 默认值(未赋值为null)
BaseUri 根地址
ServiceName 服务名称
RouteHandlerBuilder 基于RouteHandlerBuilder的委托,可用于权限认证、CORS
RouteOptions(对象) 局部路由配置
DisableAutoMapRoute 禁用自动映射路由
Prefix 前缀
Version 版本
AutoAppendId 路由中是否包含{Id}font>, 例如: /api/v1/user/
PluralizeServiceName 服务名称是否启用复数
GetPrefixes 用于识别当前方法类型为Get请求
PostPrefixes 用于识别当前方法类型为Post请求
PutPrefixes 用于识别当前方法类型为Put请求
DeletePrefixes 用于识别当前方法类型为Delete请求
DisableTrimMethodPrefix 禁用移除方法前缀(上方GetPostPutDelete请求的前缀)
MapHttpMethodsForUnmatched 通过方法名前缀匹配请求方式失败后,路由将使用指定的HttpMethod发起请求 此方式Swagger不支持, 无法正常显示API

MiniApi文档

MASA Framework (masastack.com)

这是官方文档地址,MasaFramework提供了很多的包都没有存在什么强依赖,都可以单独拿到项目中使用,这也是我目前一直学习Masaframework的原因,

好了MasaMiniApi的使用案例介绍到这里

来自token的分享

技术交流群:737776595

如何在现有项目中使用`Masa MiniApi`?的更多相关文章

  1. 现有项目中集成Flutter

    本文列举了项目开发使用Flutter会遇到的问题,以及如何使用Flutter module在现有项目中集成Flutter,并对其原理进行了分析. 最近在做的一个商业项目,完全的使用Flutter编写的 ...

  2. Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够分析我们的项目文件. 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 R ...

  3. 如何实现在react现有项目中嵌入Blazor?

    如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...

  4. React Native 在现有项目中的探路

    移动开发中,native开发性能和效果上无疑是最好的. 但是在众多的情况下,native开发并不是最优的选择.当需求经常改动的时候,当预算有限的时候,当deadline很近的时候,native开发的成 ...

  5. 集成activiti到现有项目中

    1.在lib中添加相关的jar包 2.找到一个activiti.cfg.xml,若是想用现有的数据库需要配置 <?xml version="1.0" encoding=&qu ...

  6. 如何在现有的Vue项目中嵌入 Blazor项目?

    目前官方只提供了angular和react俩种示例,所以本教程将来讲解如何在Vue的现有项目中使用,上期已经做好了react的教材! 准备流程 Vue 项目创建流程 使用Vue创建一个Demo项目 全 ...

  7. 如何使用vs将现有的项目或者文件夹(尤其是多层目录的)添加到项目中

    困扰我这么久的问题,哎,真心弱爆了! 1.将现有项目或文件夹拷贝到指定目录下 2.解决方案右上有个显示所有文件的按钮 然后选中所有要添加的文件,右击 选择包含到项目中即可

  8. 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结

    将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...

  9. Atitit.css 规范 bem  项目中 CSS 的组织和管理

    Atitit.css 规范 bem  项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 ...

  10. iOS原生项目中集成React Native

    1.本文的前提条件是,电脑上已经安装了CocoaPods,React Native相关环境. 2.使用Xcode新建一个工程.EmbedRNMeituan [图1] 3.使用CocoaPods安装Re ...

随机推荐

  1. 关于数据传递 json

    关于这几种语言的json 操作 Lua local cjson2 = require "cjson" local lua_object = { ["name"] ...

  2. 复制文件到U盘提示“一个意外错误使您无法复制该文件”处理办法

    运行cmd 运行 chkdsk H(U盘所在盘符):/f    即可

  3. Delphi数据库备份

    此处代码只是测试代码,仅仅是测试 //环境:D7+SQL Server 2008 1 unit Unit1; 2 3 interface 4 5 uses 6 Windows, Messages, S ...

  4. MyBatis-Plus使用SQL语句

    项目中碰到一个必须要使用动态SQL的地方, 想着在xml文件中进行一层一层的判断太麻烦了,也不好理解,要是能在Java代码中组织好SQL,进行查询操作 QueryWrapper<object&g ...

  5. [C#]协变Covariance案例

    协变参考代码1: using System; using System.Collections.Generic; using System.Linq; namespace CovarianceSoOn ...

  6. NRF52832的FDS程序,参考非蓝牙例程修改而来(需要增加DFU的基础上只要增加如下程序即可解决)

    /* Dummy configuration data. */ static configuration_t m_dummy_cfg = { .config1_on = false, .config2 ...

  7. Linux 系统下挂载linux 系统盘

    1应用背景:有时候系统崩溃无法修复,无法正常启动,而系统盘里面有需要的文件如log等需要拷贝出来,或者系统盘可以正常启动但是不方便用一台设备来启动这个系统盘.而直接将Linux系统盘接到windows ...

  8. ubuntu添加了id_rsa.pub*authorized_keys依然不能免密登录?

    cd .ssh chmod 600 authorized_keys 还是不行,看日志 tail -f /var/log/auth.log bad ownership or modes for dire ...

  9. 中文数据导入到hive,出现乱码

    中文数据导入到hive,出现乱码 解决方法: 右键要导入的数据文件,选择用Notepad++打开,然后点击"编辑"-->转为UTF-8,最后保存即可. 然后在上传到指定路径下 ...

  10. 解决ssh $host jps bash: jps: command not found 问题

    问题描述 使用 ssh $host jps 命令报错,连本机也会有这样的情况,但是分开使用并没有问题,即ssh $host下执行jps命令并不会报错. 原因 因为ssh远程连接到服务器的环境变量中不包 ...