RedirectToLocal() 跳转到不同的 URL。

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

这个想法是,如果用户尚未登录,则会被带到登录页面,然后返回到这个“Ask”页面。当用户输入例如http://example.com/Home/Ask/12345678时,Ask()方法将使用正确的ID值被调用。现在用户被重定向到登录页面。在AccountController中的Login()代码成功验证用户之后,它调用ReturnToLocal(),传入我们期望的URL(http://example.com/Home/Ask/12345678)。但是,ASP .NET没有调用Ask()方法,而是调用了Index()方法。请协助理解为什么我的重定向出现问题。谢谢!

请同时放置登录操作方法的代码。只有这样我才能理解发生了什么。 - Aravindan
1个回答

6

由于您没有提供登录动作方法或RedirectToLocal方法,我假设您正在使用来自MVC5模板的AccountController

private ActionResult RedirectToLocal(string returnUrl)
{
      if (Url.IsLocalUrl(returnUrl))
      {
        return Redirect(returnUrl);
      }
      return RedirectToAction("Index", "Home");
}

你可以看到RedirectToLocal方法检查returnUrl参数是否为'localUrl'。如果不是,它会调用Index方法。在你的Ask方法中,你将Request.Url.AbsoluteUri传递给 returnUrl,这不是本地URL(以http://开头)!
尝试使用string retUrl = Request.Url.PathAndQuery

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接