2017-08-03 43 views
1

我试图构建一些ASP.Net核心中间件。asp.net核心检查中间件的路由属性

它需要查看当前路线是否标记为[授权]。

如:

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); 
} 

有谁知道这到底是怎么实现,或者如果它甚至有可能?

如果不是,那么什么是一种很好的替代方法?

+1

现在就知道选择哪条路线还为时过早 – Nkosi

+0

想知道这件事。找不到任何明确的答案 –

回答

0

只是自我回答关闭的问题。

似乎不可能做到这一点,因为现在还处于初期阶段。

1

不知道到底要达到什么,这是一个有点棘手回答,但我建议你看看控制器过滤器:https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/filters

我放在一起的例子:

启动。 CS

public void ConfigureServices(IServiceCollection services) 
{ 
    services 
     .AddMvc() 
     .AddMvcOptions(options => options.Filters.Insert(0, new CustomFilter())); 
} 

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 
    } 
} 
+0

谢谢。正试图读取中间件中的路由数据。看起来可能不可能 –