2017-08-03 54 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

謝謝。正試圖讀取中間件中的路由數據。看起來可能不可能 –