2017-02-01 6 views
10

ASP.NET 4では、私たちはちょうどGlobal.asaxの中で次のように追加するには、以下:ASP.NETコアにグローバルフィルタを追加する方法は?

GlobalFilters.Filters.Add(new AuthorizeAttribute() { Roles = "Admin, SuperUser" }); 

ASP.NETコアでこれを行うにはどのように任意のアイデア? docsから

+0

あなたは[ドキュメント]を確認しました(https://docs.microsoft.com/en-us/aspnet/コア/ mvc/controllers/filters#フィルタ - スコープと実行順序)? – tmg

+0

@tmgこれをありがとう、以前のASP.NETバージョンとは異なり、コアで「新しいAuthorizeAttribute()」としてパイプラインに注入できないようですが、私は今、上記を移行する方法を探していますコアのフィルタ。 – xird

答えて

16

:あなたはStartupクラスに ConfigureServices方法でMvcOptions.Filtersコレクションに追加し (すべてのコントローラとアクションのための)グローバルフィルタを登録することができ

MvcOptions.FiltersAuthorizeAttributeを追加することはできません。 AuthorizationPolicyを作成し、AuthorizeFilterを使用します。

var policy = new AuthorizationPolicyBuilder() 
     .RequireAuthenticatedUser() 
     .RequireRole("Admin", "SuperUser") 
     .Build(); 

services.AddMvc(options => 
{ 
    options.Filters.Add(new AuthorizeFilter(policy)); 
}); 
1

あなたはまた、以下のコードを使用することができます。これはインスタンスではなくタイプを使用しています。

services.AddMvc(options => 
{ 
    options.Filters.Add(typeof(AuthorizeFilter)); 
}); 

依存性注入を使用すると、ポリシーオブジェクトを解決できます。あなたは次のようにRazor Page flavor of the ASP.NET Core 2.0あなたがグローバルフィルタを追加することができます使用している場合場合は

0

services.AddMvc() 
.AddRazorPagesOptions(options => 
     { 
      options.Conventions.AuthorizeFolder("/"); // Require users to be authenticated. 
      options.Conventions.AuthorizeFolder("/", "YourPolicyName"); // Require a policy to be full filled globally. 
     }); 
関連する問題