Asp.net-Mvc

屬性似乎根本沒有作用

  • December 27, 2011

我在使用時遇到問題

$$ HandleError $$我的控制器操作上的屬性 - 它似乎根本不起作用(即過濾器是否存在並不重要 - 我得到相同的結果……)。當拋出異常時,我在“/”應用程序錯誤頁面中得到標準的紅色伺服器錯誤,而不是我的自定義視圖。 我在 SO 上找到了關於這個主題的其他幾個執行緒,在大多數情況下,似乎在 web.config 中將 customErrors 選項設置為 On 解決了這個問題。它不適合我,所以我需要找到不同的解決方案。

我的控制器動作:

[HandleError]
public ActionResult Index()
{
   throw new Exception("oops...");
   return View();
}

在我的 web.config 文件中

<customErrors mode="On"></customErrors>

我已確保 Error.aspx 文件也在 Shared 目錄中。我錯過了什麼?

我正在執行 ASP.NET MVC RC 刷新。

兩件有用的事情要知道:

預設情況下,HandleError在開發伺服器下執行時不執行任何操作。目的是向開發人員展示更多有用的資訊:

public virtual void OnException(ExceptionContext filterContext) {
   if (filterContext == null) {
       throw new ArgumentNullException("filterContext");
   }

   // If custom errors are disabled, we need to let the normal ASP.NET
   // exception handler execute so that the user can see useful
   // debugging information.
   if (filterContext.ExceptionHandled
       || ! filterContext.HttpContext.IsCustomErrorEnabled) {
       return;
   }

請注意,這種情況正是customError應該控制的。如果設置customError="On"沒有改變這種行為:

  1. 檢查你的語法。
  2. 確保您正在編輯Web.config項目根目錄中的,而不是視圖中的那個。
  3. 確保沒有程式碼集HttpContext.IsCustomErrorEnabled
  4. 如果所有其他方法都失敗,請嘗試關閉調試Web.config

其次,某些類型的錯誤HandleError永遠無法處理,尤其是 ASP.NET 編譯錯誤。你沒有說你遇到了哪個錯誤。

您還需要指定要重定向到的頁面。

<customErrors mode="On" defaultRedirect="Error.aspx" />

**編輯:**抱歉 /Shared/ 部分不應該在那裡打賭,但您需要告訴 MVC 使用 Error.aspx 將使用者發送到哪個頁面。然後預設路由會在 shared 中查找名為 Error.aspx 的內容。

很晚了!:) 我想這就是為什麼有人給我一個減號的答案!:) 至少它在這裡有效,伙計!

引用自:https://stackoverflow.com/questions/524905