2017-07-17 71 views
0

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

+0

你是否试图用'HttpPostAttribute'在方法内调用它? –

+1

请包含您的源代码。还请详细说明它返回的价值,以及您期望**返回的价值。 – mjwills

+0

@MikhailNeofitov Yeap,我试图在[HttpPost]中调用它 –

回答

0

据我了解,你从你要什么Action2,在其上进行了一些工作,但与HttpPostAttribute发布到Action2Action1,想回去Action1。一切工作都是同步的,没有AJAX。

您不应该使用Request.UrlReferrer,因为它不提供所需的值。它包含页面地址,从Action2HttpPost,显然是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); 
} 

而在客户端:

措施1视图:

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

措施2的视图(a形式内侧):

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

而一切都应该工作。

+0

虽然这在技术上是正确的,但您应该将返回值封装在检查'Url.IsLocalUrl(backUrl)'的条件中。这样可以防止恶意第三方在您的网站上发布类似登录表单的内容并通过返回URL将安全漏洞重定向到其恶意网站。允许他们对用户执行钓鱼攻击。 –

相关问题