重定向到具有未知数量的 URL 变量的操作

本文关键字:URL 变量 操作 未知数 重定向 | 更新日期: 2023-09-27 18:34:38

我先说一下,如果你知道更好的方法来做我想做的事情,请告诉我。

因此,我在我的布局(又名母版页面(中登录,以便用户无论在哪个页面上都可以登录。 (我想肯定保留( 因此,在他们成功登录后,我想将他们重定向回他们所在的页面。 我使用 Request.UrlReferrer.AbsoluteUri 来获取 URI,并解析出控制器名称和操作名称。 带有操作名称的长是未知数量的 URL 变量,可能为无,也可能很多。 因此,MVC3 不喜欢在操作名称中传递的变量。 我在代码的其他部分通过执行以下操作解决了这个问题:

return RedirectToAction("Message", new { msg = "error" });

但是,就像我说的,我不知道会有多少变量,也不知道变量的名称。 有什么建议吗?

重定向到具有未知数量的 URL 变量的操作

这是我的登录发布操作。 它会重定向到用户所在的最后一个页面或主页(如果不存在此类 URL(

[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        if (MembershipService.ValidateUser(model.UserName, model.Password))
        {
            FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/''"))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return RedirectToAction("Index", "Home");
            }
        }
        else
        {
            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }
    // If we got this far, something failed, redisplay form
    return View(model);
}

这部分是你需要的

        if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
            && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/''"))
        {
            return Redirect(returnUrl);
        }
        else
        {
            return RedirectToAction("Index", "Home");
        }

我找到了一种方法。 由于我已经在解析 URI,因此我可以获取变量和值,然后将它们添加到

RouteValueDictionary queryString = new RouteValueDictionary();

然后我可以传递给:

return RedirectToAction(action, queryString);