2017-07-17 50 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將安全漏洞重定向到其惡意網站。允許他們對用戶執行釣魚攻擊。 –

相關問題