您可以編寫自定義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>());