Asp.net-Core
asp.net核心檢查中間件中的路由屬性
我正在嘗試建構一些 ASP.Net 核心中間件。
它需要查看目前路由是否標記為
$$ Authorize $$. 例如:
public async Task Invoke(HttpContext context) { if(context.Request.Path.Value.StartsWith("/api")) { // check if route is marked as [Authorize] // and then do some logic } await _next.Invoke(context); }有誰知道這是如何實現的,或者是否有可能?
如果沒有,什麼是一個好的替代方法?
我相信它可以通過以下方式在中間件類中實現:
var hasAuthorizeAttribute = context.Features.Get<IEndpointFeature>().Endpoint.Metadata .Any(m => m is AuthorizeAttribute);
在不確切知道您想要實現什麼的情況下,回答起來有點棘手,但我建議您看看控制器過濾器:https ://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/過濾器
我整理了一個例子:
啟動.cs
public void ConfigureServices(IServiceCollection services) { services .AddMvc() .AddMvcOptions(options => options.Filters.Insert(0, new CustomFilter())); }自定義過濾器.cs
public class CustomFilter : IActionFilter { public void OnActionExecuting(ActionExecutingContext context) { if(context.HttpContext.Request.Path.Value.StartsWith("/api")) { var controllerInfo = context.ActionDescriptor as ControllerActionDescriptor; var hasAuthorizeAttr = controllerInfo.ControllerTypeInfo.CustomAttributes.Any(_ => _.AttributeType == typeof(AuthorizeAttribute)); } } public void OnActionExecuted(ActionExecutedContext context) { // NOP } }