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

Posted

技术标签:

【中文标题】ASP .NET MVC:如果不满足特定条件,则重定向到视图【英文标题】:ASP .NET MVC: Redirect to a view if certain condition is not met 【发布时间】:2009-11-22 20:38:26 【问题描述】:

我终于在这个周末尝试了 .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,但我的解决方案需要在每次请求时发生。

关于我做错了什么的任何提示?

【问题讨论】:

【参考方案1】:

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

【讨论】:

也许是因为我不知道有这样的东西存在。现在正在研究它。谢谢!【参考方案2】:

你应该设置 filterContext.Result:

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

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

【讨论】:

+1 这可能不是这里问题的最佳答案,但这正是我所需要的,而不是简单的Authorize。干杯。

以上是关于ASP .NET MVC:如果不满足特定条件,则重定向到视图的主要内容,如果未能解决你的问题,请参考以下文章

实现asp.net mvc聊天全双工

C# 和 ASP.NET MVC:在视图中使用 #if 指令

asp.net mvc 在哪里设置默认文化?

ASP.NET MVC 保存到客户端上的特定文件夹

编辑网格时,如何按行禁用特定字段? Kendo UI ASP.Net MVC 包装器

ASP.NET MVC 条件验证