1. 程式人生 > 其它 >ASP.NET Core 中介軟體獲取自定義特性

ASP.NET Core 中介軟體獲取自定義特性

技術標籤:dotnetcoreC# .netWeb伺服器中介軟體dotnetcore

在做一個軟體授權相關的需求時,需要在中介軟體中過濾授權資訊,同時需要考慮一些不需要檢查授權的特殊情況。

所以有了使用自定義特性的思路,經過查詢,找到如下實現方式:

  1. 定義自定義特性ActionAttribute.cs
        public class MyAttribute : Attribute
        {
            public string Message { get; set; }
    
            public MyAttribute (string message )
            {
                Message = message ;
            }
        }

  2. 自定義中介軟體類: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;
            }
        }

  3. 在Startup.cs中啟用自定義中介軟體
    app.UseMiddleware<MyMiddleware>();

  4. 使用方法

在控制器的各個方法上加上【MyAttribute】