ASP.NET Core 中介軟體獲取自定義特性
阿新 • • 發佈:2021-02-04
技術標籤:dotnetcoreC# .netWeb伺服器中介軟體dotnetcore
在做一個軟體授權相關的需求時,需要在中介軟體中過濾授權資訊,同時需要考慮一些不需要檢查授權的特殊情況。
所以有了使用自定義特性的思路,經過查詢,找到如下實現方式:
- 定義自定義特性ActionAttribute.cs
public class MyAttribute : Attribute { public string Message { get; set; } public MyAttribute (string message ) { Message = message ; } }
- 自定義中介軟體類:MyMiddleware.cs
public class MyMiddleware { private readonly RequestDelegate _next; public MyMiddleware(RequestDelegate next, ActionLogService actionLogService) { _next = next; } public async Task InvokeAsync(HttpContext context) { var endpoint = GetEndpoint(context); var username = "未知使用者"; if (endpoint != null) { var myAttribute = endpoint.Metadata.GetMetadata<MyAttribute>(); if (myAttribute != null) { var message = myAttribute.Message; // TODO …… await _service.Add(log); } } await _next(context); } public static Endpoint GetEndpoint(HttpContext context) { if (context == null) { throw new ArgumentNullException(nameof(context)); } return context.Features.Get<IEndpointFeature>()?.Endpoint; } }
- 在Startup.cs中啟用自定義中介軟體
app.UseMiddleware<MyMiddleware>();
- 使用方法
在控制器的各個方法上加上【MyAttribute】