2011-12-15 40 views
5

我創建了一個ASP.NET MVC 3應用程序,使用httpErrors來處理向用戶顯示錯誤消息等。該代碼工作正常,並在下面重複。使用IIS7將異常傳遞到自定義錯誤頁面httpErrors

<httpErrors existingResponse="Replace" defaultResponseMode="ExecuteURL" errorMode="Custom"> 
    <clear/> 
    <error statusCode="403" path="/Error/Forbidden" responseMode="ExecuteURL"/> 
    <error statusCode="404" subStatusCode="-1" path="/Error/NotFound" responseMode="ExecuteURL"/> 
    <error statusCode="500" subStatusCode="-1" path="/Error/ServerError" responseMode="ExecuteURL"/> 
</httpErrors> 

當一個控制器發生異常時,BaseController.OnException被觸發(BaseController是一類我自己創造的)。我想在該函數中執行的操作是存儲異常,以便ServerError操作可以查看其類型和消息以確定向用戶顯示的內容。整個方法複製如下。

protected override void OnException(ExceptionContext filterContext) 
{ 
    // doesn't work 
    this.TempData["exception"] = filterContext.Exception; 

    // doesn't work 
    this.Session["exception"] = filterContext.Exception; 

    // temporary hack 
    ErrorController.RequestExceptions[this.Request.UserHostAddress] = filterContext.Exception; 
    base.OnException(filterContext); 
} 

當請求到達ErrorController實例(ErrorController是在不同的命名空間,但我不認爲這是相關的),由於某種原因,Server.GetLastError()返回null,TempData的是空的,會議是空的,Session.IsNewSession是真的。我嘗試通過讓應用存儲某種請求ID來解決這個問題,但這似乎並不存在,現在我得到的最佳解決方案就是這種非常冒險的「通過請求IP來存儲它,然後刪除只要ErrorController已經把它拿起來了。「

這(令人驚訝)的作品,但必須有一個更安全和更具擴展性的解決方案。我不確定爲什麼TempData被清除或爲什麼會話重新啓動 - 是因爲錯誤,還是這算作兩個單獨的請求?無論如何,是否有解決方法來獲得所需的行爲?

P.S.如果可能的話,我寧願使用web.config中的httpErrors條目,而不是Application_Error中的代碼:它看起來像一個更清晰,更具說明性的解決方案。

P.P.S.我在重定向期間發現了一篇關於Session對象問題的文章(link),但它表示問題已得到解決。我遇到過的其他大部分事情都是關於舊的customErrors系統,但我會繼續尋找。

+0

上爲什麼會被清除任何消息。我有完全相同的問題。坦克 – 2013-07-31 11:06:46

回答

2

MVC內置支持來處理異常並顯示自定義視圖。默認情況下,MVC將HandleErrorAttribute添加到Global.asax.cs文件中的RegisterGlobalFilters方法中。

public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
    } 

您需要添加一個名爲ErrorShared查看文件夾的視圖。該視圖將有HandleErrorInfo類型的模型,其作爲命名Exception屬性來獲取拋出的異常

@model System.Web.Mvc.HandleErrorInfo 

@Model.Exception.Message 
+0

那麼`httpErrors`有那麼令人困惑,還是它是爲了某種我不理解的目的? – ehdv 2011-12-15 05:36:51

相關問題