以下代码片段来自我的ASP.NET MVC 5应用程序:
public ActionResult Ask(string id) {
if (!this.User.Identity.IsAuthenticated) {
string retUrl = Request.Url.AbsoluteUri;
return RedirectToAction("Login", "Account", new { returnUrl = retUrl });
}
...
}
这个想法是,如果用户尚未登录,他将被带到登录页面,然后返回到这个“询问”页面。
当用户输入例如http://example.com/Home/Ask/12345678
时,方法Ask()将被调用id的正确值。用户现在被重定向到登录页面。
在AccountController中的Login()代码成功验证用户后,它调用ReturnToLocal(),传入我们期望的URL(http://example.com/Home/Ask/12345678
)。但是,ASP .NET不是调用Ask()方法,而是以某种方式最终调用Index()方法。
感谢您帮助理解我的重定向被破坏的原因。问候。
答案 0 :(得分:6)
由于您没有向我们提供Login
操作方法和RedirectToLocal
方法,我假设您使用的是MVC5模板中的AccountController
。
如果是的话
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home");
}
您可以看到RedirectToLocal
方法检查returnUrl
参数是否为' localUrl'。
如果不是,它会调用索引。
在您的Ask方法中,您将string retUrl = Request.Url.AbsoluteUri
作为returnUrl
传递给非本地的(以http://开头)!
尝试string retUrl = Request.Url.PathAndQuery