使用Request.UrlReferrer进行RedirectToAction

时间:2016-03-31 10:40:56

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

打扰一下,如果它是重复的,但我想找到回到上一页的最佳方法,而我在我的控制器上进行服务器端验证。

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

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

这引起了AntiForgery Token的问题。

此外:

RedirectToRoute(Request.UrlReferrer.LocalPath);

提出:

  

从中检测到潜在危险的Request.Path值   客户(:)。

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

我需要一些使用Request.UrlReferrer的建议,并且我的视图或ViewModel不需要任何额外的添加,请

修改 从我到目前为止搜索到的,最好的方式是使用

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

但是如何利用(string actionName, string controllerName, RouteValueDictionary routeValues)对象获取此Request.UrlReferrer的参数值???

1 个答案:

答案 0 :(得分:0)

这似乎是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)即使它存在,该值也可以被欺骗。