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 ,那么我建议您使用它!
它为你提供了动作,控制器,视图等的智能(没有更多魔术字符串)