2016-08-19 17 views
2

特定のエリアにフィルタを登録する方法はありますか?エリアのフィルタを登録

グローバル(認証する力)コードレジスタ承認フィルター下記例えば

services.AddMvc(config => 
{ 
    var policy = new AuthorizationPolicyBuilder() 
        .RequireAuthenticatedUser() 
        .Build(); 
    config.Filters.Add(new AuthorizeFilter(policy)); 
}); 

私は唯一のいくつかの地域のためにこれをしたいです。

答えて

1

フィルタを動的に作成できるカスタムIFilterProviderを書くことができます。

例:

public class CustomFilterProvider : IFilterProvider 
{ 
    public int Order 
    { 
     get 
     { 
      // This value is fine. The `DefaultFilterProvider` has an order of `-1000` and so is run before this provider. 
      return 0; 
     } 
    } 

    public void OnProvidersExecuted(FilterProviderContext context) 
    { 
    } 

    public void OnProvidersExecuting(FilterProviderContext context) 
    { 
     var controllerActionDescriptor = context.ActionContext.ActionDescriptor as ControllerActionDescriptor; 
     var controllerType = controllerActionDescriptor.ControllerTypeInfo; 

     var areaAttribute = controllerType.GetCustomAttribute<AreaAttribute>(); 
     if(areaAttribute != null && areaAttribute.RouteValue == "Admin") 
     { 
      var filter = new TestAuthorizationFilter(); 
      context.Results.Add(new FilterItem(new FilterDescriptor(filter, FilterScope.Global), filter)); 
     } 
    } 
} 

DIでプロバイダを登録します。

services.TryAddEnumerable(ServiceDescriptor.Singleton<IFilterProvider, CustomFilterProvider>()); 
関連する問題