如何在现有项目中使用`Masa MiniApi`? - tokengo
source link: https://www.cnblogs.com/hejiale010426/p/17331554.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
如何在现有项目中使用`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
本文作者:tokengo
本文链接:https://www.cnblogs.com/hejiale010426/p/17331554.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK