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

5
我正在学习Asp.net MVC 3。只是想知道,是否有一种方法可以定义一个在执行任何控制器的其他方法之前执行的方法?这意味着它应该像基本“Controller”类的构造函数一样工作。
这将包括一些常见功能,如检查用户会话/如果未登录,则重定向到登录页面,否则从数据库中设置一些常见值,这些值将在整个应用程序中使用。我想只写一次它们,不想在每个控制器方法上调用一个方法。
问候
1个回答

7

这就是动作过滤器的作用。框架中已经内置了一些,比如AuthorizeAttribute

        [Authorize(Roles = "Admins")]
        public ActionResult Index()
        {
            return View();
        }

编辑:

筛选器可以设置在动作、控制器或全局筛选器上。

[Authorize(Roles = "Admins")]
public class LinkController : Controller
{
    //...
}

在Global.asax文件中

    protected void Application_Start()
    {
        GlobalFilters.Filters.Add(new AuthorizeAttribute { Roles = "Admins" });
        //...
    }

使用这个,我需要在每个控制器的每个方法上使用这个过滤器,对吗?我想避免这些步骤。基本上,如果我将“Controller”类扩展为“MyController”,并创建所有其他控制器来扩展“MyController”,那么它应该可以工作。虽然这是一个好的解决方案吗(我自己尚未尝试,正在寻求专家建议)? - Rana
3
您可以像这样在控制器级别上使用这些属性:[Authorize]public class ReportsController : Controller { },或者将其注册在您的Global.asax中作为全局设置应用于每个控制器:protected void Application_Start() { GlobalFilters.Filters.Add(new AuthorizeAttribute()); ... } - tpeczek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接