Asp.net-Mvc

ASP.NET MVC 處理錯誤

  • October 8, 2008

如何[HandleError]在 asp.net MVC Preview 5 中使用過濾器?

我在我的 Web.config 文件中設置了 customErrors

<customErrors mode="On" defaultRedirect="Error.aspx">
 <error statusCode="403" redirect="NoAccess.htm"/>
 <error statusCode="404" redirect="FileNotFound.htm"/>
</customErrors>

並將 [HandleError] 放在我的控制器類上方,如下所示:

[HandleError]
public class DSWebsiteController: Controller
{
   [snip]
   public ActionResult CrashTest()
   {
       throw new Exception("Oh Noes!");
   }
}

然後我讓我的控制器從這個類繼承並在它們上呼叫 CrashTest()。Visual Studio 在錯誤處停止,按 f5 繼續後,我被重新路由到 Error.aspx?aspxerrorpath=/sxi.mvc/CrashTest (其中 sxi 是使用的控制器的名稱。當然找不到路徑,我得到了“’/’ 應用程序中的伺服器錯誤。”404。

這個站點是從預覽版 3 移植到 5 版的。除了錯誤處理之外,一切都在執行(移植的工作並不多)。當我創建一個完整的新項目時,錯誤處理似乎起作用了。

想法?

–注意–

由於這個問題現在有超過 3K 的瀏覽量,我認為把我目前正在使用的(ASP.NET MVC 1.0)放入其中會是有益的。在mvc contrib 項目中,有一個名為“RescueAttribute”的出色屬性,您可能也應該檢查一下;)

[HandleError]

當您僅向您的類(或您的操作方法)提供 HandleError 屬性時,當發生未處理的異常時,MVC 將首先在控制器的視圖文件夾中查找名為“錯誤”的相應視圖。如果在那裡找不到它,它將繼續查看共享視圖文件夾(預設情況下應該有一個 Error.aspx 文件)

[HandleError(ExceptionType = typeof(SqlException), View = "DatabaseError")]
[HandleError(ExceptionType = typeof(NullReferenceException), View = "LameErrorHandling")]

您還可以使用有關您正在查找的異常類型的特定資訊來堆疊其他屬性。此時,您可以將錯誤定向到預設“錯誤”視圖以外的特定視圖。

有關更多資訊,請查看Scott Guthrie 的部落格文章

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