ASP .NET MVC:如果不满足某些条件,则重定向到视图

时间:2009-11-22 20:38:26

标签: asp.net asp.net-mvc redirect view

我终于在本周末尝试了.NET MVC,正如预期的那样,遇到了一些障碍。

我正在尝试在开发过程中对我的网站进行密码保护。基本思想非常简单:在我的BaseController类(继承自Controller并由所有其他控制器类继承)中,我检查是否设置了某个Session变量。如果未设置,我需要将它们重定向到特定视图,用户可以在其中输入密码。关键是这个检查应该在每个请求上发生,无论他们访问的网站的哪个部分。这是我尝试但失败的原因: 覆盖BaseController类中的OnActionExecuting并检查以下内容:

if ((Session["siteAuth"] == null || (bool)Session["siteAuth"] != true) && 
        filterContext.ActionDescriptor.ActionName != "EnterPassword") {
   RedirectToAction("EnterPassword");
}
else {
   base.OnActionExecuting(filterContext);
}

OnActionExecuting在每个请求上执行,但是,RedirectToAction不会发生。基本上它只是呈现它否则会渲染的视图。

我找到的最接近的解决方案是here,但是每次请求都需要我的解决方案。

关于我做错了什么提示?

2 个答案:

答案 0 :(得分:12)

为什么不用[Authorize]装饰你的动作或控制器?

答案 1 :(得分:3)

您应该设置filterContext.Result:

    protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.Result = RedirectToAction("EnterPassword");
    }

但正如Daniel Liuzzi所说,还有其他更好的方法可以做到。