gpt4 book ai didi

asp.net-mvc - RedirectToLocal() 转到不同的 url

转载 作者:行者123 更新时间:2023-12-02 03:50:20 24 4
gpt4 key购买 nike

以下代码片段来 self 的 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 });
}
...
}

这个想法是,如果用户尚未登录,他将被带到登录页面,然后返回到此“询问”页面。

例如,当用户输入 <a href="http://example.com/Home/Ask/12345678" rel="noreferrer noopener nofollow">http://example.com/Home/Ask/12345678</a> 时,将使用正确的 id 值调用方法 Ask()。用户现在被重定向到登录页面。

AccountController 中的 Login() 代码成功验证用户身份后,它会调用 ReturnToLocal(),并传入我们期望的 url ( <a href="http://example.com/Home/Ask/12345678" rel="noreferrer noopener nofollow">http://example.com/Home/Ask/12345678</a> )。然而,ASP .NET 最终没有调用 Ask() 方法,而是调用了 Index() 方法。

感谢您帮助理解我的重定向失败的原因。问候。

最佳答案

由于您没有向我们提供 Login 操作方法和 RedirectToLocal 方法,我假设您正在使用 MVC5 模板中的 AccountController 。如果是这样

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 作为 returnUrl 传递,它不是本地的(以 http://开头)!

尝试string retUrl = Request.Url.PathAndQuery

关于asp.net-mvc - RedirectToLocal() 转到不同的 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27560840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com