C 高階 WebApi異常處理機制

2022-04-12 01:27:19 字數 3167 閱讀 2012

其實對於c#異常處理大家都不陌生,但是對於在weiapi上的異常處理實際上也和傳統異常處理區別不大,但是卻經過封裝可以讓異常更加友好,通過微軟的官方介紹,我們可以知道weiapi可以簡單概述為三種異常,接下來我們圍繞這三種異常給出例子,如何封裝和處理以上三種異常

異常過濾器實現了

介面。編寫異常過濾器最簡單的方法是從

system.web.http.filters.exceptionfilterattribute類派生

並重寫onexception

方法。microsoft給出的關於異常過濾器解釋,那麼如何實現呢?通過閱讀《asp.net  web api2 框架揭秘》,我們知道每一次客戶端請求api都會通過http請求,服務端得到結果輸出response到客戶端。這個過程中,一旦服務端發生異常,會統一向客戶端返回500的錯誤。

那麼在web api中如何定義

1

public

class

webapiexceptionfilterattribute : exceptionfilterattribute 216

else

if (actionexecutedcontext.exception is

timeoutexception)

1720

//.....這裡可以根據專案需要返回到客戶端特定的狀態碼。如果找不到相應的異常,統一返回服務端錯誤500

21else

2225

26base

.onexception(actionexecutedcontext);27}

28 }

view code

**解析:通過判斷異常的具體型別,向客戶端返回不同的http狀態碼,示例裡面寫了兩個,可以根據專案的實際情況加一些特定的我們想要捕獲的異常,然後將對應的狀態碼寫入http請求的response裡面,對於一些我們無法判斷型別的異常,統一返回服務端錯誤500。microsoft也有乙個**實現,但是沒有封裝

有幾種方法可以註冊web api異常過濾器: 

要將過濾器應用於特定操作,請將過濾器作為屬性新增到操作中:

public class productscontroller : apicontroller

}

要將過濾器應用於控制器上的所有操作,請將過濾器作為屬性新增到控制器類中:

[notimplexceptionfilter]

public class productscontroller : apicontroller

要將過濾器全域性應用於所有web api控制器,請將過濾器例項新增到

globalconfiguration.configuration.filters

集合中。

此集合中的執行篩選器適用於任何web api控制器操作。

globalconfiguration.configuration.filters.add(

new productstore.notimplexceptionfilterattribute());

如果需要,甚至可以向status code裡面寫入自定義的描述資訊,並且還可以向我們的response的content裡面寫入我們想要的資訊。我們稍微改下onexception方法:

if (actionexecutedcontext.exception is notimplementedexception)

異常過濾器是針對介面控制器以及全域性定義,一般返回的都是伺服器級別的錯誤,但是有的時候我們需要定義業務異常的**,那麼如果是業務異常的情況下我們就可以使用httpresponseexception自定義異常,如下述**:

public product getproduct(int

id)的產品

}

可以看到具體的業務異常資訊是通過httpresponsemessage封裝,最後由httpresponseexception丟擲,microsoft沒有解釋httpresponsemessage是什麼,起初筆者以為這是乙個httpresponseexception的子類,但是跟蹤了後發現httpresponsemessage 繼承了idisposable介面,而idisposable介面的主要用途是釋放非託管的資源。垃圾**器自動釋放不再使用該物件時分配給託管物件的記憶體。但是,不可能**將發生垃圾**。此外,垃圾**器具有不知道如視窗控制代碼的非託管資源,或開啟檔案和流。從描述上來看使用httpresponsemessage時就代表發生了異常並且進行一次資源管理的**,所以筆者認為,使用httpresponsemessage可以更清晰的描述業務中所發生的 異常,並且在返回異常的時候進行一次垃圾**,減少程式資源浪費

物件提供了乙個一致的方式在回應主體中返回的錯誤資訊。

以下示例顯示如何

在響應正文中

使用httperror

返回http狀態碼404(not found)

。通過microsoft的解釋就可以知道httperror提供的是狀態碼返回,那麼實際應用上更多的是將其和httpresponseexception一起使用。

}借鑑c#高階系列——webapi 異常處理解決方案,

借鑑(microsoft官網)asp.net web api中的異常處理

在一般的專案中,可以定義好一些全體的關於伺服器端的異常處理,並且封裝好乙個httpresponseexception自定義異常的處理,無需捕獲httpresponseexception異常,api會自己處理這個異常的,並且最好為每個異常給出更加詳細的http狀態碼,可以讓異常更加精細友好

c 異常處理機制

c 異常處理機制 c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到...

c 異常處理機制

c 異常處理機制是乙個用來有效地處理執行錯誤的非常強大且靈活的工具,它提供了更多的彈性 安全性和穩固性,克服了傳統方法所帶來的問題.異常的丟擲和處理主要使用了以下三個關鍵字 try throw catch 丟擲異常即檢測是否產生異常,在c 中,其採用throw語句來實現,如果檢測到產生異常,則丟擲異...

C 異常處理機制

c 異常處理機制主要使用try,throw,catch三大關鍵字。try catch語句形式如下 require redcarpet markdown redcarpet.new hello world puts markdown.to htmltry catch exception1 ex 捕獲型...