まず、空の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
関数:
- サービスのグループ化: API サービスを
Service
異なるグループに書き込む - 自動マッピングルート:RESTful標準をサポート
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
のグローバル構成
パラメータ名 | パラメータの説明 | デフォルト |
---|---|---|
AutoMapRouteを無効にする | 自動マップルーティングを無効にする | false |
プレフィックス | 接頭語 | api |
バージョン | バージョン | v1 |
AutoAppendId | ルートに {Id} が含まれていますか (例: /api/v1/user/) | true |
サービス名を複数形にする | サービス名の複数化を有効にするかどうか | true |
プレフィックスの取得 | 現在のメソッドのタイプをGet リクエストとして識別するために使用されます |
new List<string> { "Get", "Select", "Find" } |
ポストプレフィックス | 現在のメソッドのタイプをPost リクエストとして識別するために使用されます |
new List<string> { "Post", "Add", "Upsert", "Create", "Insert" } |
PutPrefixes | 現在のメソッドのタイプをPut リクエストとして識別するために使用されます |
new List<string> { "Put", "Update", "Modify" } |
プレフィックスの削除 | 現在のメソッドのタイプをDelete リクエストとして識別するために使用されます |
new List<string> { "Delete", "Remove" } |
DisableTrimMethodPrefix | メソッドのプレフィックスの削除を無効にする (要求されたプレフィックスGet 、Post 、の上)Put Delete |
間違い |
MapHttpMethodsForUnmatched | メソッド名のプレフィックスによるリクエスト メソッドの一致に失敗した後、ルートは指定された HttpMethod を使用してリクエストを開始します。 | サポートPost 、Get 、このメソッドは Swagger ではサポートDelete さPut れていないため、API を正常に表示できません |
アセンブリ | サービスのスキャンに使用されるアセンブリ | MasaApp.GetAssemblies() (グローバル アセンブリ コレクション。デフォルトは現在のドメイン アセンブリ コレクションです) |
ルートハンドラービルダー | 委任に基づいて、権限認証やCORSなどRouteHandlerBuilder に使用できます。 |
null |
インサービス構成
パラメータ名 | パラメータの説明 | デフォルト値 (null には割り当てられません) | |
BaseUri | ルートアドレス | ||
サービス名 | サービス名 | ||
ルートハンドラービルダー | RouteHandlerBuilder に基づく委任。権限認証やCORSなどに使用できます。 | ||
RouteOptions (オブジェクト) | ローカルルーティング設定 | ||
AutoMapRouteを無効にする | 自動マップルーティングを無効にする | ||
プレフィックス | 接頭語 | ||
バージョン | バージョン | ||
AutoAppendId | ルートに {Id}font> を含めるかどうか (例: /api/v1/user/{id}) | ||
サービス名を複数形にする | サービス名の複数化を有効にするかどうか | ||
プレフィックスの取得 | 現在のメソッドのタイプをGet リクエストとして識別するために使用されます |
||
ポストプレフィックス | 現在のメソッドのタイプをPost リクエストとして識別するために使用されます |
||
PutPrefixes | 現在のメソッドのタイプをPut リクエストとして識別するために使用されます |
||
プレフィックスの削除 | 現在のメソッドのタイプをDelete リクエストとして識別するために使用されます |
||
DisableTrimMethodPrefix | メソッドのプレフィックスの削除を無効にする (要求されたプレフィックスGet 、Post 、の上)Put Delete |
||
MapHttpMethodsForUnmatched | メソッド名プレフィックスによるリクエスト メソッドの一致に失敗した後、ルートは指定された HttpMethod を使用してリクエストを開始します。このメソッドは Swagger ではサポートされていないため、API は正常に表示できません。 |
MiniApi ドキュメント
这是官方文档地址,MasaFramework
提供了很多的包都没有存在什么强依赖,都可以单独拿到项目中使用,这也是我目前一直学习Masaframework
的原因,
好了MasaMiniApi
的使用案例介绍到这里
来自token的分享
技术交流群:737776595