在MVC中运行任何Controller Action之前调用Session

时间:2010-07-16 10:34:07

标签: asp.net-mvc session controller action global-asax

我在Session_OnStart()调用中的global.asax文件中进行了身份验证检查:

if (Session["Authenticated"] == null)
        {
            Response.Redirect("~/Login.aspx");
        }

这种会话身份验证在我们所有的网络应用程序中紧密耦合,因此我必须以这种方式使用它。这个global.asax位于一个较旧的Webforms项目中,我的MVC项目就位于该项目中。因此我认为它允许我直接访问我的控制器操作,例如http://localhost/controller/action,而不会填充会话身份验证,即它不会重定向。我已经将这段代码添加到EACH控制器操作中来解决这个问题,但有没有办法在全局(而不是在global.asax中)设置它,这样我只需要为所有控制器操作调用一次?感谢。

1 个答案:

答案 0 :(得分:6)

您应该创建一个所有控制器继承的基本控制器。然后你只需要在一个地方有逻辑。即:

public abstract class BaseController : ControllerBase
然后,您可以使用新BaseContoller中的initialize方法来执行常见逻辑。即。

[edit] - 更改为OnActionExecuting,而不是Initialize。这不是最优雅的地方,因为我们正处于被调用视图的尖端​​。然而,这是一个起点。

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    // you should be able to get session stuff here!!
    base.OnActionExecuting(filterContext);
}

并在每个控制器中:

public class AnotherNormalController : BaseController