Mar*_*man 28 c# asp.net-mvc redirect
我对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对身份验证很有用(如上面的链接所示)我想将此添加到该事件在基类Controller类中很好,因为每个页面都在MVC中运行一个Action,所以不应该有很大的不同,并且具有重定向的能力应该更容易.这确实有意义,但对我来说似乎也有意义,事情可以在事件发生前的事件中完成,并让我们质疑这些事件的用途是什么?将OnActionExecuting要去...
Jim*_*mmy 26
1)当用户注销时(表单注销操作)我想重定向到登录页面.
public ActionResult Logout() {
//log out the user
return RedirectToAction("Login");
}
Run Code Online (Sandbox Code Playgroud)
2)在Controller或基本控制器事件中,例如Initialze,我想重定向到另一个页面(AbsoluteRootUrl + Controller + Action)
为什么要从控制器init重定向?
路由引擎自动处理进来的请求,如果您想要从控制器上的索引操作重定向,只需执行以下操作:
public ActionResult Index() {
return RedirectToAction("whateverAction", "whateverController");
}
Run Code Online (Sandbox Code Playgroud)
1)要从登录页面重定向到登录页面/,请不要使用Redirect()方法。使用FormsAuthentication.RedirectToLoginPage()和FormsAuthentication.RedirectFromLoginPage()!
2)您应该只在常规情况下使用RedirectToAction(“ action”,“ controller”)。您想在Initialize方法旁边进行重定向吗?为什么?我不知道您为什么会这样做,在大多数情况下,您应该查看imo方法。如果您想进行身份验证,那么这肯定是错误的方式(极少有发生异常情况的机会)[Authorize]而是您的控制器或方法上的属性:)
UPD: 如果您在Initialize方法中进行了一些安全检查,并且用户没有访问此方法的权限,则可以执行以下两项操作:
Response.StatusCode = 403;
Response.End();
Run Code Online (Sandbox Code Playgroud)
这会将用户发送回登录页面。如果您想将他发送到自定义位置,则可以执行以下操作(注意:伪代码)
Response.Redirect(Url.Action("action", "controller"));
Run Code Online (Sandbox Code Playgroud)
无需指定完整网址。这应该足够了。如果您完全坚持使用完整网址:
Response.Redirect(new Uri(Request.Url, Url.Action("action", "controller")).ToString());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
98680 次 |
| 最近记录: |