【问题标题】:RedirectToAction by using Request.UrlReferrerRedirectToAction 使用 Request.UrlReferrer
【发布时间】:2016-03-31 10:40:56
【问题描述】:

对不起,如果它是重复的,但我正在尝试找到返回上一页的最佳方法,同时我在控制器上进行服务器端验证。

我尝试了一些可能是不好的做法...

Response.Redirect("~" + Request.UrlReferrer.LocalPath);

这引发了 AntiForgery 令牌的问题。

还有:

RedirectToRoute(Request.UrlReferrer.LocalPath);

提出:

从 客户 (:)。

还有其他一些不起作用的东西。

我需要一些使用Request.UrlReferrer 的建议,并且不需要对我的视图或视图模型进行任何额外的添加

编辑: 从我到目前为止搜索的内容来看,最好的方法是使用

return RedirectToAction(string actionName, string controllerName, RouteValueDictionary routeValues);

但是我怎样才能通过使用Request.UrlReferrer 对象来获取这个(string actionName, string controllerName, RouteValueDictionary routeValues) 的参数值???

【问题讨论】:

  • 一般要注意使用 UrlReferrer。它可能未设置为您所期望的。
  • @Mattias,谢谢你的警告!我会很感激你的建议.. :)

标签: c# asp.net-mvc-4 response.redirect


【解决方案1】:

这似乎是XY Problem。您很可能希望将用户带到一个页面以执行某些操作,然后将他们重定向回他们最初来自的页面。正确的做法是将他们发送到他们必须执行操作的页面,并在查询字符串中返回 URL:

<a href="@Url.Action("Foo", new { returnUrl = Request.RawUrl })">Do something</a>

然后,在该页面的表单上,添加:

@Url.Hidden("returnUrl", Request["returnUrl"])

最后,在您的帖子操作中:

public ActionResult Foo (MyModel model, string returnUrl)
{
    if (ModelState.IsValid)
    {
        // do something

        if (!String.IsNullOrWhiteSpace(returnUrl) && Url.IsLocalUrl(returnUrl))
        {
            return Redirect(returnUrl);
        }

        return RedirectToAction("Fallback");
    }

    return View(model);
}

UrlReferrer 使用起来很危险,因为 1) 它根本不保证存在,并且 2) 即使存在,该值也可以被轻易欺骗。

【讨论】:

    猜你喜欢
    • 2014-08-06
    • 1970-01-01
    • 2010-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多