MVC全域性異常處理

2022-02-25 16:38:10 字數 2747 閱讀 4397

異常的方式是在web form時代我們(起碼是我)常用的方式,但是在mvc

時代到臨的時候,這些處理是否更容易呢?答案是肯定的,因為技術是在不斷進步的嘛。在mvc中我們對於已知的異常資訊仍然會採用try

catch的方式,並且是很常用的方式,但是對於驗證使用者登陸或者catch未捕獲的異常資訊(當然我的意思是catch(exception ex)

在catch最後沒有這一條,或者說有這一句,但是把異常資訊進行了丟擲處理),我們有了更容易實現的方式。下面讓我們一起走進如何使用mvc處理異常信

息。在軟體架構不斷發展的同時,設計模式也有了很多變種,aop(面向切面程式設計或面向方面程式設計)就是乙個變種的設計模式,對於設計模式的學習,我個人不推

薦死記硬背,我希望可以了解每種模式的意義,然後在專案中不要刻意的去使用它,而是在重構的時候進行,這樣我們可以更加深入的了解設計模式背後包含的含

義。舉個例子,單例模式是乙個經典的設計模式,它可以保證類的例項只有乙個,但是如果我們不正確的使用這種方式,有時候會帶來負面效果,比如多執行緒同時訪

問,只有在保證加鎖、解鎖的情況下可以保證,[url=北京.net培訓

[/url]但是在普通情況下就會出現意想不到的錯誤資訊。物件導向程式設計具有繼承性,這應該是物件導向三大特性之一,這是類的垂直方面的程式設計工作,有上下

級或父子關係,aop是水平方面的程式設計,它可以保證在開始之前或結束之後進行,不會破壞裡面的結構。個人粗淺理解。在mvc

3中對aop的支援就表現在filter

過濾器上,他可以保證在開始之前或結束之後進行。對於異常的處理我們採用的是自定義異常處理資訊繼承自iexceptionfilter,當然在mvc總

內建了乙個handleerrorattribute也可以用來捕獲異常,但是我們自己來控制可能會更好一些。

首先我們在homecontroller的index方法中丟擲乙個異常資訊

1 public actionresult index(int? id, int pagesize = 20)2 9

10 throw new httpexception(500, "");//丟擲異常資訊

1112

13 return view(bloglist);

14 }

15 //404not found

16 public actionresult notfound()

17 20 //內部伺服器錯誤 500

21 public actionresult internalerror()

22 2.設定自定義處理異常類

28 //寫入日誌 記錄

29 filtercontext.exceptionhandled = true;//設定異常已經處理

30 }

31 }

在這裡我要多說一句,有些園友可能遇到這麼乙個問題,就是丟擲了乙個500的內部伺服器異常,但是在自定義異常資訊中就是無法捕獲到,是什麼原因呢?

其實就是mvc對500 的特殊照顧,在httpexception的httpcode為500的時候,mvc框架會自動的處理,然後將其exceptionhandled設定為true。

對於其他的異常狀態碼,比如404就沒有這樣的照顧,所以500我們要優先照顧呀。

3.在設定好了自定義異常處理以後,我們可以在每個action或controller中進行注入,但是在mvc 3

中提供了另外一種可以全域性注入的方式,[url=北京.net培訓

[/url]那就是全域性filter,我一般叫做全域性篩選器。這樣就相當於我們在所有的action上都進行了注入。

在global.asax中,進行全域性註冊

1 public static void registerglobalfilters(globalfiltercollection filters)

2 4.我們在設定了自定義異常處理以後,會跳轉到對應的頁面,裡面的資訊相信大家都可以自己定製了

5.有圖有證據 先來乙個404異常處理資訊

我請求的頁面是home/index,然後自動跳轉到了notfound頁面

還有500錯誤,如果您不注意判斷乙個這個錯誤,那麼你是不可能的

總結一下,在mvc中處理異常有很多中方式,handleerrorattribute,自定義異常處理類(重寫iexceptionfilter或者

是handleerrorattribute 的onexception方法),傳統的try catch方法,這些都可以,除去那個try

catch,其實自定義異常處理就是filter的體現,和登陸驗證沒有任何區別。

還有一點就是httpexception的httpcode為500的情況,exceptionhandled會被自動設定為true,需要特殊照顧一下。

在我們處理完了異常以後,一定要將其exceptionhandled設定為true,這樣可以避免父類或者更高一級的異常處理捕獲處理該異常資訊。

mvc處理異常就是這麼簡單,filter特性就是那麼強大,讓我們擁抱mvc,擁抱filter。

MVC 全域性異常捕獲

summary 自定義全域性異常捕獲 summary public class exceptionhelper filterattribute,iexceptionfilter br ex.gettype tostring filtercontext.httpcontext.response.wri...

全域性異常處理 springBoot 全域性異常處理

先讚後看,月入百萬 springboot開發的web專案中,強調分層的概念,乙個完整的專案一般會劃分出controller層和service層。因此,為了 的可維護性,controller層 應該盡量簡潔,驗證一下引數,直接丟給service層處理即可 異常處理的方式無外乎兩種 在springboo...

全域性異常處理

3 丟擲異常類的使用 處理 介面無權訪問異常accessdeniedexception param e return exceptionhandler accessdeniedexception.class public responseentity handleaccessdeniedexcept...