首页 > 其他分享 >如何在现有项目中使用`Masa MiniApi`?

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

时间:2023-04-18 22:56:36浏览次数:51  
标签:MiniApi Task return Masa public v1 api 现有 id

首先我们现有创建一个空的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

标签:MiniApi,Task,return,Masa,public,v1,api,现有,id
From: https://www.cnblogs.com/hejiale010426/p/17331554.html

相关文章

  • 第一章 使用MASA Stack+.Net 从零开始搭建IoT平台 环境准备
    @目录前言架构图一、设备接入二、处理设备遥测数据三、设备控制四、管理后台五、数据存储六、规则引擎环境准备1、安装EMQX2、创建解决方案3、安装Dapr开发环境前言本系列文章以IoT开发小白的角度,从零开始使用.Net为主要技术搭建一个简单的IoT平台,由于是入门系列,所有代码以围绕I......
  • 第二章 使用MASA Stack+.Net 从零开始搭建IoT平台 设备生命周期管理-设备注册.
    设备生命周期管理-设备注册@目录设备生命周期管理-设备注册前言一、设备注册流程二、MQTT注册1.在EMQX中添加认证方式2.创建ApiKey3.调用接口创建用户三、测试设备连接四、编写代码总结前言我们不希望任何设备都可以接入我们的IoT平台,所以一个设备正常的接入流程是这样的,1、......
  • MASA MAUI Plugin 集成个推,实现本地消息推送(六)【Android】篇
    MASAMAUIPlugin(六)集成个推,实现本地消息推送[Android]篇背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对......
  • MASA MAUI Plugin 安卓蓝牙低功耗(二)蓝牙通讯
    MASAMAUIPlugin安卓蓝牙低功耗(二)蓝牙通讯项目背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的......
  • MASA MAUI Plugin IOS蓝牙低功耗(三)蓝牙扫描
    MASAMAUIPluginIOS蓝牙低功耗(三)蓝牙扫描项目背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的......
  • MASA MAUI Plugin (四)条形码、二维码扫描功能
    MASAMAUIPlugin(四)条形码、二维码扫描功能背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的补充......
  • MASA MAUI Plugin (十)iOS消息推送(原生APNS方式)
    MASAMAUIPlugin(十)iOS消息推送(原生APNS方式)背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAUI的补......
  • MASA MAUI Plugin (七)应用通知角标Android+iOS
    MASAMAUIPlugin(七)应用通知角标(小红点)Android+iOS背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MAU......
  • MASA MAUI Plugin (九)Android相册多选照片(使用Android Jetpack套件库)
    MASAMAUIPlugin(九)Android相册多选照片(使用AndroidJetpack套件库)背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项......
  • MASA MAUI Plugin (八)Android相册多选照片(Intent 方式)
    MASAMAUIPlugin(八)Android相册多选照片(Intent方式)背景MAUI的出现,赋予了广大Net开发者开发多平台应用的能力,MAUI是Xamarin.Forms演变而来,但是相比Xamarin性能更好,可扩展性更强,结构更简单。但是MAUI对于平台相关的实现并不完整。所以MASA团队开展了一个实验性项目,意在对微软MA......