我使用ASP.NET MVC2 Web應用程序創建了一個新的MVC2項目,該應用程序爲我提供了默認網站。我添加了一個簡單的區域,其中有一個主控制器和一個索引視圖。這引發了編譯器的第一個問題:「找到與控制器名稱'Home'匹配的多個類型」。我將Home更改爲Main並編譯。使用UrlReferrer返回到區域內的呼叫頁面
我添加了一個新選項卡來引用我的區域中的索引視圖,打開網站並開始單擊選項卡。當我訪問了該地區索引頁,我不能回到主頁或關於頁面不改變菜單,如下所示:
<ul id="menu">
<li><%= Html.ActionLink("SampleArea.Main", "Index", "Main", new { area = "SampleArea" }, null)%></li>
<li><%= Html.ActionLink("Home", "Index", "Home", new { area = "" }, null)%></li>
<li><%= Html.ActionLink("About", "About", "Home", new { area = "" }, null)%></li>
</ul>
然後我可以通過正確的選項卡循環。後來我改變在賬戶控制器註銷視圖的代碼,如下所示:
public ActionResult LogOff()
{
FormsService.SignOut();
//return RedirectToAction("Index", "Home");
return RedirectToAction(Request.UrlReferrer.AbsolutePath.ToString());
}
我使用UrlReferrer.AbsolutePath如果用戶註銷時返回到調用頁面。如果調用頁面恰好是SampleArea中的視圖,則.AbsolutePath包含「/ SampleArea」。這是因爲控制器和視圖是默認設置,所以它們不包括在內。繼續,我收到以下錯誤消息:
無法找到該資源。
描述:HTTP 404.您正在查找的資源 (或其中一個 依賴關係)可能已被刪除, 的名稱已更改,或者 暫時不可用。請 查看以下URL並確保 拼寫正確。請求的URL:/帳號/ SampleArea
我的理解是,/帳戶已被添加,因爲這是它被執行註銷等當控制器。它認爲/ SampleArea是一個動作,因此添加了當前控制器來完成路由。
使用UrlReferrer.AbsolutePath,有沒有什麼方法可以指定SampleArea作爲區域,還是有其他方法可以返回到正確的頁面?
新增
這比我想象的還要陌生。我打開了我目前正在開發的網站,並將LogOut中的return語句更改爲使用AbsolutePath返回。斷點顯示它包含「/ Club/PrivacyPolicy」。不過,我得到以下區別相同的錯誤消息:
請求的URL:/登錄/俱樂部/個人信息保護
爲什麼地球上應該將其與/登錄前綴它是一個視圖,而比/帳戶是一個控制器?事實上,它爲什麼要用任何東西加上前綴呢?/Club/PrivacyPolicy 是Global.asax.cs中的有效路由。
這並不直接回答你的問題,但我會小心依賴UrlReferrer,因爲一些代理服務器和防火牆將它從響應中剝離出來作爲安全措施。 – JasonS 2010-12-10 18:53:31
這是爲什麼?這個價值肯定是由系統設定的,所以不應該有惡意注入的提示。 – xiecs 2010-12-11 09:50:34
referrer經常被防火牆,防病毒軟件,代理等切斷。所以你不應該依賴你的代碼邏輯來處理這些數據。 – zerkms 2010-12-11 13:09:44