C# Request.urlReferer未在控制器页面上工作

C# Request.urlReferer未在控制器页面上工作,c#,asp.net-mvc-4,C#,Asp.net Mvc 4,我想在我的控制器上使用Request.urlreferer.PathAndQuery方法作为返回重定向(Request.urlreferer.PathAndQuery),但它总是获取当前页面URL,我猜我的登录页面位于名为AccountController的控制器内,因此此方法不会从该控制器中退出。因为当我尝试在\u布局上使用@Request.urlreferer.PathAndQuery时,它运行得很好。你知道解决方案吗?据我所知,你有Action1从你要做的Action2开始,对它执行一些工

我想在我的控制器上使用
Request.urlreferer.PathAndQuery
方法作为
返回重定向(Request.urlreferer.PathAndQuery),但它总是获取当前页面URL,我猜我的登录页面位于名为AccountController的控制器内,因此此方法不会从该控制器中退出。因为当我尝试在
\u布局上使用
@Request.urlreferer.PathAndQuery
时,它运行得很好。你知道解决方案吗?

据我所知,你有
Action1
从你要做的
Action2
开始,对它执行一些工作,用
HttpPostAttribute
将它发布到
Action2
,并想回到
Action1
。没有AJAX,一切都是同步工作的

您不应该使用
Request.urlReferer
,因为它不提供所需的值。它包含到页面的地址,从您使用
HttpPost
看到的
Action2
,它显然是
Action2
带有
[HttpGet]
或没有属性(类似于
[HttpGet]

如果用户应该永久重定向到所需页面,第一种方法是使用控制器的
RedirectToAction
方法:

return RedirectToAction("Action1", "YourControllerName");
另一种方法是在客户端的隐藏输入上存储要重定向的url。需要修改控制器的代码:

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);
}
在客户端:

行动1观点:

...
@Html.ActionLink("text", "Action2", new { backUrl = Url.Action("Action1") })
...
Action2视图(表单内部):

。。。
...

一切都应该正常。

您是否试图在方法内部使用
httpposattribute
调用它?请包含您的源代码。另外,请详细说明它返回的值,以及您希望它返回的值。@MikhailNeofitov Yeap,我正试图在[HttpPost]中调用它,不要依赖于推荐人。它是用户提供的,因此不稳定;它也不会在各种场景中提供。正如@CodeCaster正确地说的,不要依赖
urlreferer
。如果需要将用户重定向回上一个URL,则应将上一个URL作为请求的一部分传递。在重定向之前,请确保使用
Url.IsLocaLUrl
检查返回Url。这可以确保它只能是您网站上的URL,防止用户通过更改转到其他域来误导请求。虽然这在技术上是正确的,但您应该将返回内容包装在一个条件中,该条件检查
URL.IsLocalUrl(backUrl)
。这可以防止出现安全漏洞,恶意第三方可以将登录表单之类的内容发布到您的站点,并通过返回URL将用户重定向回其恶意站点。允许他们对您的用户执行网络钓鱼攻击。
...
<input name='backUrl' type='hidden' value='@ViewBag.ReturnUrl' />
...