2016-03-31 23 views
1

對不起,如果它是重複的,但我試圖找到返回到上一頁的最佳方式,而我做我的控制器上的服務器端驗證。RedirectToAction通過使用Request.UrlReferrer

我嘗試了一些東西,這可能是不好的做法...

Response.Redirect("~" + Request.UrlReferrer.LocalPath); 

這引發了與防僞令牌的問題。

另外:

RedirectToRoute(Request.UrlReferrer.LocalPath); 
凸起

從 客戶端(:)檢測到潛在危險的Request的值。

和其他一些不起作用的東西。

我需要一些建議,即利用了Request.UrlReferrer的,不需要任何額外的補充我的意見或的ViewModels,請

編輯: 從我搜索到目前爲止,最好的辦法沃爾德是使用

return RedirectToAction(string actionName, string controllerName, RouteValueDictionary routeValues); 

但我怎麼能利用Request.UrlReferrer對象得到這個(string actionName, string controllerName, RouteValueDictionary routeValues)參數值???

+0

一般使用UrlReferrer時會被警告。它可能不符合你的期望。 – Mats

+0

@Mattias,謝謝你的警告!我希望沿着一個建議.. :) – cnom

回答

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)即使是這樣,該值可以平凡僞造。