在MVC中處理異常的總結

2021-09-06 13:57:00 字數 2870 閱讀 5110

無論是桌面程式還是web程式,異常處理都是必須的. 一般的處理方式是, 捕獲異常,然後記錄異常的詳細資訊到文字檔案或者資料庫中.

在asp.net mvc中可以使用內建的filter——handleerror來處理程式發生的異常。接下來,來看看如何在我們的mvc專案中使用。

要讓handleerrorattribute特性工作,需要修改我們的web.config檔案配置

system.web

>

...<

customerrors

mode

="on"

defaultredirect

="error.htm"

/>

system.web

>

handleerrorattribute 特性能夠在action, controller, 和global 三個級別中使用

在action方法上使用,非常簡單,只需要在方法頭上加上handleerror特性,告訴mvc如果該action方法出現異常,交由handleerror特性處理

[handleerror(exceptiontype = typeof(system.data.dataexception), view = "

databaseerror")]

public actionresult index(int

id)

上面例子中,當在執行index方法的時候,如果發生資料庫異常,  mvc 將會顯示databaseerrorview. 所以需要在views\shared\下面建立乙個databaseerror.cshtml。

同action相似,只需要簡單的將改特性放到controller類頭上,告訴mvc如果該controller中的action方法出現異常,都交由handleerror特性處理

[handleerror(exceptiontype = typeof(system.data.dataexception), view = "

databaseerror")]

public

class

homecontroller : controller

預設的, asp.net mvc已經把handleerror特性註冊成global. 這裡你可以新增自定義的filter

public

static

void

registerglobalfilters(globalfiltercollection filters)

); filters.add(

new handleerrorattribute()); //

by default added

}

一定要注意, 全域性的filter是依照它們註冊的順序執行的。所以如果有多個filter, 要在註冊其它fileter之前註冊error filter

當然,你也可以在註冊global filter的時候,指定它們的順序。下面的**是指定了順序的,和上面的等價。

public

static

void

registerglobalfilters(globalfiltercollection filters),1

);}

沒有辦法記錄錯誤日誌

它只捕獲http 500錯誤, 但是不捕獲其它型別的http錯誤,比如404, 401等。

如果是在ajax請求的情況下,返回的錯誤view,對於ajax訪問沒有任何意義。如果在ajax請求出錯的情況下,返回json對於客戶端的處理就容易和友好的多。

我們可以通過繼承handleerrorfilter來實現自己的異常處理filter.  下面的filter, 實現了在出現錯誤的時候,記錄異常日誌和在ajax請求異常的情況下,返回json物件.

以上就是在mvc開發中,自己常用到的一些小技巧,希望對大家有幫助。

在MVC中處理異常的總結

無論是桌面程式還是web程式,異常處理都是必須的.一般的處理方式是,捕獲異常,然後記錄異常的詳細資訊到文字檔案或者資料庫中.在asp.net mvc中可以使用內建的filter handleerror來處理程式發生的異常。接下來,來看看如何在我們的mvc專案中使用。要讓handleerrorattr...

MVC 中建立自己的異常處理

1.新建類乙個類繼承 handleerrorattribute 類把異常書寫到佇列中 1 public class myexceptionattribute handleerrorattribute 215 2.在 filterconfig 註冊我們自定義的異常處理類 public class fi...

MVC全域性異常處理

異常的方式是在web form時代我們 起碼是我 常用的方式,但是在mvc 時代到臨的時候,這些處理是否更容易呢?答案是肯定的,因為技術是在不斷進步的嘛。在mvc中我們對於已知的異常資訊仍然會採用try catch的方式,並且是很常用的方式,但是對於驗證使用者登陸或者catch未捕獲的異常資訊 當然...