有没有办法为特定区域注册过滤器?
例如下面的代码全局注册授权过滤器(强制进行身份验证):
services.AddMvc(config =>
{
var policy = new AuthorizationPolicyBuilder()
.RequireAuthenticatedUser()
.Build();
config.Filters.Add(new AuthorizeFilter(policy));
});
我想要这个,但仅限于某些地区。
你可以写一个自定义的IFilterProvider
它可以动态创建过滤器。
Example:
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>());
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)