打扰一下,如果它是重复的,但我想找到回到上一页的最佳方法,而我在我的控制器上进行服务器端验证。
我尝试过一些可能不好的做法......
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
的参数值???
答案 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)即使它存在,该值也可以被欺骗。