Netor.MicroService.Abstractions 1.2.5
Netor.MicroService.Abstractions
项目功能
Netor.MicroService.Abstractions 提供构建微服务控制器的基础能力,包括统一返回格式、便捷的 HttpContext 访问、全局拦截与响应格式化配置等,帮助以 Minimal API 风格快速实现业务端点。
核心功能
Netor.MicroService.Generator
Install-Package Netor.MicroService.Generator
dotnet add package Netor.MicroService.Generator
Netor.MicroService.Generator
Install-Package Netor.MicroService.Abstractions
dotnet add package Netor.MicroService.Abstractions
- 统一结果输出:提供
Success/Failed/Json便捷方法,约定统一响应格式。 - 便捷上下文访问:通过 HttpContext/Request/Response 快速访问请求上下文(由宿主或上层框架注入)。
- 参数绑定默认策略:通过 MicroServiceOptions.ValueFrom 指定默认参数值来源。
- 控制器标记:提供 [Controller] 特性用于参与控制器发现(由宿主或上层组件完成路由与激活)。
- AOT 友好:避免使用反射,适配 AOT 场景。
- 依赖注入支持:支持通过 [FromServices] 属性注入服务实例。
- 异常处理:通过 MicroServiceOptions.UseExceptionHandler 进行全局异常捕获与处理。
- 请求拦截:通过 MicroServiceOptions.UseRequestHandler 进行全局请求拦截。
- IP 地址验证:通过 MicroServiceOptions.UseIPAddressVerifyHandler 进行请求 IP 白名单验证。
- 授权验证:通过 MicroServiceOptions.UseAuthorizeHandler 进行请求授权验证。
- 响应格式化:通过 MicroServiceOptions.Formater 定制统一响应格式。
- 支持 .NET 8 Minimal API 风格。
- 支持 ASP.NET Core MVC 特性(如 [FromQuery]、[FromForm]、[FromBody]、[FromHeader]、[FromRoute]、[FromServices] 等)。
- 支持异步控制器方法(返回 Task
)。 - 支持控制器与方法级别的 [AllowAnonymous] 特性,允许匿名访问。
- 依耐源代码生成器以简化控制器与路由的注册(见 Netor.MicroService.Generator)。
技术架构
- 语言:C#
- 目标框架:.NET 8
- 依赖技术:
- ASP.NET Core Abstractions(IResult、HttpContext、MVC 特性)
- Microsoft.Extensions.Options(配置绑定)
项目结构(与当前代码一致)
- Controllers
- BaseController:统一返回与上下文访问的基类。
- Attributes
- ControllerAttribute:标记控制器类型,用于控制器发现。
- Extensions
- MicroServiceOptions:全局选项(ValueFrom、Formater、OnRequest)。
- TypeExtensions:简单类型判定(AOT 友好)。
- Enums
- ValueFrom:参数默认绑定来源枚举。
使用方法
- 在应用中配置 MicroServiceOptions(可选)
var builder = WebApplication.CreateBuilder(args);
builder.Services
.AddLogging()
// 添加微服务支持(必须)
.AddMicroService(options =>
{
options.ValueFrom = ValueFrom.FromForm;
//配置全局请求拦截器
options.UseRequestHandler(OnRequestHandler);
//配置IP地址验证拦截器
options.UseIPAddressVerifyHandler(OnIPAddressVerifyHandler);
//一旦设置该拦截器,所有请求均需通过授权验证,除非请求路径被标记为允许匿名访问。
options.UseAuthorizeHandler(OnAuthorizeHandler);
//配置全局异常处理器
options.UseExceptionHandler(OnExceptionHandler);
});
var app = builder.Build();
// 启用微服务中间件(必须)
app.UseMicroService();
await app.RunAsync();
//全局请求拦截器
Task<(bool status,string message)> OnRequestHandler(HttpContext context)
{
context.RequestServices.GetRequiredService<ILogger<Program>>().LogWarning("OnRequestHandler");
return Task.FromResult((true, "ok"));
}
//IP地址验证
Task<(bool status, string message)> OnIPAddressVerifyHandler(string ipAddress,HttpContext context)
{
context.RequestServices.GetRequiredService<ILogger<Program>>().LogWarning("OnIPAddressVerifyHandler:{ip}",ipAddress);
return Task.FromResult((true, "ok"));
}
//授权验证
Task<(bool status, string message)> OnAuthorizeHandler(HttpContext context)
{
context.RequestServices.GetRequiredService<ILogger<Program>>().LogWarning("OnAuthroan");
return Task.FromResult((true, "ok"));
}
//全局异常处理器
Task<(bool status, int code, string message)> OnExceptionHandler(Exception ex, IServiceProvider service)
{
service.GetRequiredService<ILogger<Program>>().LogError(ex,"OnExceptionHandler");
return Task.FromResult((true,500, "ok"));
}
- 定义控制器(Minimal API 风格,返回 IResult)
using Microsoft.AspNetCore.Mvc;
using Netor.MicroService;
// 必须 1. [Controller]
// 必须 2. partial
[Controller] // 标志该类为控制器
//[AllowAnonymous] 控制器下所有方法允许匿名访问 默认不需要授权除非设置了options.UseAuthorizeHandler(OnAuthorizeHandler);
public partial class UserController
{
// [属性注入] 通过依赖注入获取日志实例
[FromServices]
public ILogger<OrderController> Logger { get; set; }=default!;
//[AllowAnonymous] 单个方法允许匿名访问
[HttpGet("/users")]
public IResult Index()
=> Success(new { items = Array.Empty<object>(), total = 0 });
[HttpPost("/users")]
public IResult Create([FromForm] string name)
=> string.IsNullOrWhiteSpace(name)
? Failed("name is required", 400)
: Success(new { id = Guid.NewGuid(), name });
}
- 健康检查
dotnet add package Microsoft.Extensions.Diagnostics.HealthChecks
var builder = WebApplication.CreateBuilder(args);
// 注册健康检查服务
builder.Services.AddHealthChecks();
//需要什么自己添加扩展包
//builder.Services.AddHealthChecks()
// .AddSqlServer(connectionString, name: "SQL Server");
var app = builder.Build();
// 映射健康检查端点
app.MapHealthChecks("/health");
说明:
- BaseController 提供 Success/Failed/Json 便捷方法与 HttpContext 访问属性。
- HttpContext 需由宿主或上层框架(或配套生成器/激活器)在执行前注入。
- 统一响应格式可通过 MicroServiceOptions.Formater 全局定制。
贡献
欢迎通过 Issue 或 Pull Request 参与贡献。
No packages depend on Netor.MicroService.Abstractions.
.NET 8.0
- Microsoft.AspNetCore.OpenApi (>= 8.0.18)
- Microsoft.EntityFrameworkCore (>= 9.0.0)
- Microsoft.Extensions.Configuration.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Hosting.Abstractions (>= 9.0.8)
| Version | Downloads | Last updated |
|---|---|---|
| 1.2.5 | 19 | 10/30/2025 |
| 1.2.4 | 8 | 09/29/2025 |
| 1.2.3 | 2 | 09/29/2025 |
| 1.2.2 | 7 | 09/26/2025 |
| 1.2.1 | 3 | 09/26/2025 |
| 1.2.0 | 4 | 09/26/2025 |
| 1.1.9 | 5 | 09/24/2025 |
| 1.1.8 | 18 | 09/07/2025 |
| 1.1.7 | 17 | 09/03/2025 |
| 1.1.6 | 9 | 09/03/2025 |
| 1.1.5 | 7 | 09/02/2025 |
| 1.1.4 | 8 | 09/02/2025 |
| 1.1.3 | 6 | 09/02/2025 |
| 1.1.2 | 9 | 09/01/2025 |
| 1.0.9 | 7 | 09/01/2025 |
| 1.0.7 | 10 | 09/01/2025 |
| 1.0.6 | 9 | 09/01/2025 |
| 1.0.5 | 7 | 09/01/2025 |
| 1.0.3 | 8 | 09/01/2025 |
| 1.0.2 | 8 | 09/01/2025 |
| 1.0.1 | 8 | 09/01/2025 |
| 1.0.0 | 8 | 09/01/2025 |