[HandleError]過濾器提供了一種聲明的方式,來在一個Controller或一個Action方法上表示,若是在處理一個ASP.NET MVC請求中發生錯誤的話,應該顯示一個友好的錯誤回覆。web
要試驗一下的話,在項目中加一個新的TestController,實現一個action方法,在其中象下面這樣拋出一個異常:瀏覽器
在默認情形下,若是將瀏覽器指向這個URL的話,它會給遠程用戶顯示一個默認的ASP.NET錯誤網頁(除非你去web.config文件中配置了<customErrors>節):spa
咱們能夠在咱們的Controller類或其中的Action方法上加一個[HandleError]屬性,來改變要顯示的HTML錯誤,而顯示對終端用戶比較友好的信息:blog
HandleError過濾器會捕捉住全部的異常(包括處理視圖模板時拋出的錯誤),在出錯時顯示一個定製的Error視圖回覆。在默認情形下,它試圖在你的項目中尋找一個名爲「Error」的視圖模板來生成回覆。你能夠將「Error」視圖置於同個Controller相應的視圖的目錄之中(例如,上面的TestController的\Views\Test目錄),也能夠置於\Views\Shared文件夾中(系統會先找一個特定於控制器的出錯視圖,若是沒找到的話,會在Shared文件夾中尋找,該文件夾包含了爲全部控制器所共享的視圖)。開發
從第四個預覽版開始,在你建立新的ASP.NET MVC項目時,Visual Studio如今會自動爲你在\Views\Shared文件夾中加一個默認的「Error」視圖模板:博客
在咱們的TestController類上加[HandleError]屬性後,在默認情形下,它會給遠程用戶顯示一個象下面這樣的HTML錯誤頁面(注意,它使用了項目的母板頁,這樣就將錯誤信息集成進了站點之中)。很明顯地,你能夠去定製這個Error視圖模板,顯示你想要的任何HTML或者更加友好的錯誤信息,下面只不過是隨該版本而來的原裝的信息:io
爲幫助開發人員,在本地瀏覽應用時,Visual Studio中由新的項目模板提供的默認的Error視圖模板還會顯示額外的錯誤堆棧跟蹤信息:模板
你能夠在Error視圖模板中將代碼刪除來將其關閉,或者也能夠在你的web.config文件中將<customErrors>設成「Off」。配置
在默認情形下,[HandleError]過濾器將捕捉和處理請求中拋出的全部異常。你也能夠在[HandleError]屬性上指定 "ExceptionType"和"View"屬性來指定你感興趣的特定異常類型,以及指定定製的錯誤視圖:終端
在上面的代碼中,我選擇爲SqlException和NullReferenceException異常顯示定製的錯誤視圖,全部其它的異常則將使用默認的「Error」視圖模板。