2017-08-03 13 views
1

私はいくつかの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); 
} 

は、誰もがこれを達成する方法を知っていますか、それも可能ですか?

もしそうでなければ、良い代替アプローチは何でしょうか?

+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

ありがとうございます。ミドルウェアのルートデータを読み込もうとしていました。見えないかもしれないようです –

関連する問題