Dan*_*eny 4 .net c# asp.net-mvc razor asp.net-mvc-3
目前我[Authorize]对我的所有方法都有属性,AdminController除了Logon动作.
反转这个的最简洁的方法是什么,所以我不必记住将属性添加到所有方法,而是仅将属性添加到应该可用的方法而不登录?
将Logon动作移动到自己的控制器,并将该[Authorize]属性应用于AdminController类,我会更好吗?
在ASP.NET MVC 3中,您可以实现自定义全局操作筛选器提供程序:
public class MyProvider : IFilterProvider
{
public IEnumerable<Filter> GetFilters(ControllerContext controllerContext, ActionDescriptor actionDescriptor)
{
var rd = controllerContext.RouteData;
var controller = rd.GetRequiredString("controller");
if (string.Equals("admin", controller, StringComparison.OrdinalIgnoreCase) &&
string.Equals("logon", actionDescriptor.ActionName))
{
return Enumerable.Empty<Filter>();
}
return new[]
{
new Filter(new AuthorizeAttribute(), FilterScope.Action, 0)
};
}
}
Run Code Online (Sandbox Code Playgroud)
可以注册Application_Start:
FilterProviders.Providers.Add(new MyProvider());
Run Code Online (Sandbox Code Playgroud)
现在,如果您正在使用某些DI容器(例如NInject),例如它支持过滤器绑定语法,这意味着您可以配置内核以根据上下文动态注入过滤器.
这种方法的优点是,现在无需向您的应用程序添加什么控制器或操作=>它将需要授权.
| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |