在Asp.net MVC中实现通用功能的位置

Ran*_*ana 5 asp.net-mvc asp.net-mvc-3

我正在学习Asp.net MVC 3.只是想知道,有没有办法定义一个方法,在执行任何控制器的任何其他方法之前执行?这意味着它应该像基础"Controller"类的构造函数一样工作.

这将包括一些常见功能,如检查用户会话/如果没有登录重定向到登录页面,否则从db中设置一些将在应用程序中的任何位置使用的常用值.我只想写一次它们,不想在每个控制器方法上调用一个方法.

问候

fre*_*nky 7

这就是动作过滤器的用途.有一些已经构建在框架中,如AuthorizeAttribute:

        [Authorize(Roles = "Admins")]
        public ActionResult Index()
        {
            return View();
        }
Run Code Online (Sandbox Code Playgroud)

编辑:

可以在操作,控制器或全局过滤器上设置过滤器.

[Authorize(Roles = "Admins")]
public class LinkController : Controller
{
    //...
}
Run Code Online (Sandbox Code Playgroud)

在Global.asax里面

    protected void Application_Start()
    {
        GlobalFilters.Filters.Add(new AuthorizeAttribute { Roles = "Admins" });
        //...
    }
Run Code Online (Sandbox Code Playgroud)

  • 您可以在控制器级别上使用这些属性,如下所示:[Authorize] public class ReportsController:Controller {},或在Global.asax中注册为每个控制器的全局:protected void Application_Start(){GlobalFilters.Filters.Add(new AuthorizeAttribute( )); ...} (3认同)