Request.UrlReferrer无法在控制器页面上工作

时间:2017-07-17 12:00:45

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

我想在我的控制器上使用Request.UrlReferrer.PathAndQuery方法作为return Redirect(Request.UrlReferrer.PathAndQuery);,但它总是获取当前页面的URL,我想我的登录页面位于一个名为AccountController的控制器中,所以这个方法没有离开那个控制器。因为当我尝试在@Request.UrlReferrer.PathAndQuery上使用_Layout时,它运作良好。你知道解决方案吗?

1 个答案:

答案 0 :(得分:0)

据我了解,您有Action1来自Action2,对其进行了一些处理,并将其Action2张贴到HttpPostAttribute并希望回到Action1。一切都在同步,没有AJAX。

您不应使用Request.UrlReferrer,因为它不提供所需的值。它包含的网页地址,来自Action2 HttpPost Action2,显示[HttpGet] [HttpGet]或没有属性(类似于RedirectToAction) 。

如果用户应永久重定向到所需页面,那么第一种方法是使用控制器的return RedirectToAction("Action1", "YourControllerName"); 方法:

public ActionResult Action2(string backUrl)
{
    if (string.IsNullOrEmpty(backUrl)) 
    { 
        throw new ArgumentNullException("backUrl"); 
    }
    ViewBag.ReturnUrl = backUrl;
    //your work
    return View();
}

[HttpPost]
public ActionResult Action2(YourModel model, string backUrl)
{
    //your work
    return Redirect(backUrl);
}

另一种方法是存储url以重定向客户端上的隐藏输入。需要修改控制器代码:

...
@Html.ActionLink("text", "Action2", new { backUrl = Url.Action("Action1") })
...

在客户端:

Action1视图:

...
<input name='backUrl' type='hidden' value='@ViewBag.ReturnUrl' />
...

Action2视图(在表单内):

root: './'

一切都应该有效。