注册区域过滤器 [英] Register filter for an area
本文介绍了注册区域过滤器的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
是否可以注册特定区域的过滤器?
Is there a way to register filter for specific area?
例如下面的代码在全局范围内注册授权过滤器(强制进行身份验证):
For example below code register Authorization Filter globally(force to authenticate):
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
我想要这个,但只限于某些地区.
I want this but only for some areas.
推荐答案
您可以编写一个自定义的IFilterProvider
,它可以动态创建过滤器.
You could write a custom IFilterProvider
which can create the filter dynamically.
示例:
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>());
这篇关于注册区域过滤器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文