ASP.NET MVC:重定向到MVC中的页面/动作的正确方法是什么?

我对MVC很新,但不确定究竟哪个Redirect …替换了WebForms中使用的标准重定向,即标准的Response.Redirect()

例如,我需要在几个场景中重定向到其他页面:

1)当用户注销时(表单注销操作)我想重定向到登录页面。

2)在Controller或基本控制器事件中,例如Initialize ,我想重定向到另一个页面(AbsoluteRootUrl + Controller + Action)

似乎在某些情况下会调用多个重定向导致错误,这与页面已被重定向的事实有关? 如何取消当前请求并重定向?

更新:

这个问题的答案( System.Web.Mvc.Controller Initialize )表明不应该使用Initialize并且应该使用OnActionExecuting

有关为什么不使用Initialize或为什么OnAuthorization不是更好的选择的任何评论?

更多信息:

这篇博客文章( http://blog.wekeroad.com/blog/aspnet-mvc-securing-your-controller-actions/ )表明OnActionExecuting对身份validation很有用(如上面的链接所示)我想将此添加到基本Controller类中的事件很好,因为每个页面都在MVC中运行一个Action,所以不应该有很大的不同,并且具有重定向能力应该更容易。 这确实有意义,但对我来说似乎也有意义,事情可以在事件发生前的事件中完成,并让我们质疑这些事件的用途是什么? OnActionExecuting一个去..

1)当用户注销时(表单注销操作)我想重定向到登录页面。

 public ActionResult Logout() { //log out the user return RedirectToAction("Login"); } 

2)在Controller或基本控制器事件中,例如Initialze,我想重定向到另一个页面(AbsoluteRootUrl + Controller + Action)

为什么要从控制器init重定向?

路由引擎自动处理进来的请求,如果您想要从控制器上的索引操作重定向,只需执行以下操作:

 public ActionResult Index() { return RedirectToAction("whateverAction", "whateverController"); } 

1)要重定向到登录页面/从登录页面,请不要使用Redirect()方法。 使用FormsAuthentication.RedirectToLoginPage()FormsAuthentication.RedirectFromLoginPage()

2)您应该在常规场景中使用RedirectToAction(“action”,“controller”)..您想要在Initialize方法中重定向? 为什么? 我不明白为什么你会想要这样做,在大多数情况下你应该检查你的方法imo ..如果你想这样做进行身份validation,这绝对是错误的方式(很少有exception的机会)使用而是控制器或方法上的[Authorize]属性:)

UPD:如果您在Initialise方法中进行了一些安全检查,并且用户无法访问此方法,您可以执行以下操作:a)

 Response.StatusCode = 403; Response.End(); 

这将把用户发送回登录页面。 如果你想把他送到一个自定义的位置,你可以做这样的事情(cautios:pseudocode)

 Response.Redirect(Url.Action("action", "controller")); 

无需指定完整的URL。 这应该足够了。 如果你完全坚持完整的url:

 Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString()); 
 RedirectToAction("actionName", "controllerName"); 

还有其他超载,请检查!

此外,如果您是新手,并且您没有使用T4MVC ,那么我建议您使用它!

它为你提供了动作,控制器,视图等的智能(没有更多魔术字符串)