如何在现有项目中使用`Masa MiniApi`?
首先我们现有创建一个空的WebApi的项目模板,这个项目模板和MasaFramework本身没有任何关联,我们本博客只是使用的MasaFramework的MiniApi的包
- 创建
Asp.NET Core 空的项目模板

- 项目名称
MFMiniApi

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

这就是一个空的项目模板

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

安装一下
Swagger搜索
Swashbuckle.AspNetCore安装使用
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 "成功了吗";
}
}启动项目,通过
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 | 禁用移除方法前缀(上方Get、Post、Put、Delete请求的前缀) |
false |
| MapHttpMethodsForUnmatched | 通过方法名前缀匹配请求方式失败后,路由将使用指定的HttpMethod发起请求 | 支持Post、Get、Delete、Put 此方式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 | 禁用移除方法前缀(上方Get、Post、Put、Delete请求的前缀) |
||
| MapHttpMethodsForUnmatched | 通过方法名前缀匹配请求方式失败后,路由将使用指定的HttpMethod发起请求 此方式Swagger不支持, 无法正常显示API |
MiniApi文档
MASA Framework (masastack.com)
这是官方文档地址,MasaFramework提供了很多的包都没有存在什么强依赖,都可以单独拿到项目中使用,这也是我目前一直学习Masaframework的原因,
好了MasaMiniApi的使用案例介绍到这里
来自token的分享
技术交流群:737776595
如何在现有项目中使用`Masa MiniApi`?的更多相关文章
- 现有项目中集成Flutter
本文列举了项目开发使用Flutter会遇到的问题,以及如何使用Flutter module在现有项目中集成Flutter,并对其原理进行了分析. 最近在做的一个商业项目,完全的使用Flutter编写的 ...
- Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够分析我们的项目文件. 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 R ...
- 如何实现在react现有项目中嵌入Blazor?
如何实现在react现有项目中嵌入Blazor? 目前官方只提供了angular和react俩种示例所以本教程只将react教程 思路讲解: 首先在现有react项目中我们可能某些组件是在Blazor ...
- React Native 在现有项目中的探路
移动开发中,native开发性能和效果上无疑是最好的. 但是在众多的情况下,native开发并不是最优的选择.当需求经常改动的时候,当预算有限的时候,当deadline很近的时候,native开发的成 ...
- 集成activiti到现有项目中
1.在lib中添加相关的jar包 2.找到一个activiti.cfg.xml,若是想用现有的数据库需要配置 <?xml version="1.0" encoding=&qu ...
- 如何在现有的Vue项目中嵌入 Blazor项目?
目前官方只提供了angular和react俩种示例,所以本教程将来讲解如何在Vue的现有项目中使用,上期已经做好了react的教材! 准备流程 Vue 项目创建流程 使用Vue创建一个Demo项目 全 ...
- 如何使用vs将现有的项目或者文件夹(尤其是多层目录的)添加到项目中
困扰我这么久的问题,哎,真心弱爆了! 1.将现有项目或文件夹拷贝到指定目录下 2.解决方案右上有个显示所有文件的按钮 然后选中所有要添加的文件,右击 选择包含到项目中即可
- 将React Native 集成进现有OC项目中(过程记录) 、jsCodeLocation 生成方式总结
将RN集成到现有OC项目应该是最常见的,特别是已经有OC项目的,不太可能会去专门搞个纯RN的项目.又因为RN不同版本,引用的依赖可能不尽相同,所以特别说明下,本文参考的文档是React Native ...
- Atitit.css 规范 bem 项目中 CSS 的组织和管理
Atitit.css 规范 bem 项目中 CSS 的组织和管理 1. 什么是BEM?1 1.1. 块(Block)2 1.2. 元素(Element)2 1.3. BEM树(和DOM树类似).3 ...
- iOS原生项目中集成React Native
1.本文的前提条件是,电脑上已经安装了CocoaPods,React Native相关环境. 2.使用Xcode新建一个工程.EmbedRNMeituan [图1] 3.使用CocoaPods安装Re ...
随机推荐
- WV电影网站的设计与实现-可行性研究分析报告
引言 WV(Wonderful View)电影网站--奇景电影网. 1.1编写目的 1.2背景 在信息发展的时代,地球人口越来越多,人们相比去拥挤的电影院,更喜欢待在舒适的家中,通过互联网访问本站,实 ...
- python3.5升级到3.6
第一步: sudo apt-get install software-properties-common sudo add-apt-repository ppa:jonathonf/python-3. ...
- nhrhrhr
每名学生按规定时间进行答辩,答辩总时间控制在12分钟,其中包括学生报告7分钟.提问以及回答问题5分钟. 1.答辩开始前由答辩委员会组长宣布答辩程序:学生的答辩顺序由教师确定,前一名学生答辩时,下一名答 ...
- centos安装k8s
1.确保每台机器上有docker http://get.daocloud.io/#install-docker 2.关闭 每台机器上的swap,selinux swapoff -a setenforc ...
- 复制文本到粘贴板 (vue3)(兼容ios)
// 点击复制到剪贴板 const copyToClipboard = (content)=> { if (window.clipboardData) { window.clipboardDat ...
- nginx配置权重,ip_hash....
nginx为后端web服务器(apache,nginx,tomcat,weblogic)等做反向代理 几台后端web服务器需要考虑文件共享,数据库共享,session共享问题.文件共享可以使用nfs, ...
- python-实现栈结构
# encoding=utf-8 class Stack(object): """栈""" def __init__(self): &quo ...
- 2022.07.13 vue3下pinia的简单使用及持久化
使用前说明: 当前demo使用了vue3 + vite + typescript + pinia搭建的简单项目,主要介绍了在单文件组件(sfc)基础上使用pinia的用法,懒得看api的兄弟们,来这瞅 ...
- ssh反向代理树莓派+motion,实现公网远程视频监控
注意:本文公网远程监控部分需要借助有公网IP的云服务器进行ssh反向代理. 一.借助motion实现内网的视频监控 准备 插上摄像头,然后输入ls /dev/video*命令检查是否识别了摄像头 安装 ...
- zip文件自动打包
简单的文件打包 首先是问题 我们有一个文件的文件过大,我需要删除或者压缩,当然我们就是选择压缩 如果是单个我们可以直接使用压缩功能 但是多个呢? 首先获取当前目录下的文件,使用 a=`ls` | te ...