以下代码片段来自我的 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
,使用正确的 id 值调用方法 Ask()。用户现在被重定向到登录页面。
AccountController 中的 Login() 代码成功验证用户身份后,它调用 ReturnToLocal(),传入我们期望的 url (http://example.com/Home/Ask/12345678
)。然而,ASP .NET 最终没有调用 Ask() 方法,而是调用了 Index() 方法。
感谢您帮助理解为什么我的重定向被破坏。问候。
由于您既没有向我们提供Login
动作方法也不RedirectToLocal
我假设你正在使用的方法AccountController
来自 MVC5 模板。
如果是这样
private ActionResult RedirectToLocal(string returnUrl)
{
if (Url.IsLocalUrl(returnUrl))
{
return Redirect(returnUrl);
}
return RedirectToAction("Index", "Home");
}
你可以看到RedirectToLocal
方法检查是否returnUrl
参数是“localUrl”。
如果不是,它会调用 Index.
在您的 Ask 方法中,您正在传递string retUrl = Request.Url.AbsoluteUri
as returnUrl
这不是本地的(以 http:// 开头)!
Try string retUrl = Request.Url.PathAndQuery
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)