Web API系列 三 統一異常處理

2021-09-13 20:40:27 字數 2017 閱讀 1424

前面講了webapi的安全驗證和引數安全,不清楚的朋友,可以看看前面的文章,《web api系列(二)介面安全和引數校驗》,本文主要介紹web api異常結果的處理。作為內部或者是對外提供的統一webapi 介面,統一的異常處理,把正確的資訊返回給呼叫者很重要。這樣可以讓介面開發人員,了解具體的原因所在,這樣可以得到有效的錯誤處理。

需要注意的是,webapi異常的狀態碼,盡量不要和業務狀態碼混淆。可以分為兩個不同的字段,或者是狀態碼的規則不同。相關返回資料的格式,可以參考,前面的文章。

常規的程式異常,指的是webapi 介面程式在執行的時候出現的各種異常情況,可以使用異常篩選器捕獲所有異常。

1. api自定義錯誤過濾器屬性:apiexceptionattribute

///

///api自定義錯誤過濾器屬性

/// public

class

apiexceptionhandlingattribute : exceptionfilterattribute);}

else

if (context.exception is

timeoutexception));}

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

else

); }

//記錄關鍵的異常資訊

} }

2. 定義好了錯誤過濾器,根據實際情況,在不同級別使用統一的異常處理機制。比如,介面action級別,控制器controller級別或者是全域性。

我們目前的使用的是全域性進行異常過濾。在apibase 增加異常過濾。

[apiauth]

[apiexceptionhandling]

public

class

apibase : apicontroller

對於常規的異常,我們通過上面的處理方式,就可以很好進行攔截並處理了,如果介面異常是全域性性的,如訪問地不正確,或者呼叫的介面就不是有效的位址,這樣的話,返回的資訊就不會被上面的***進行處理了。

如我們給乙個無效的api呼叫路徑,在瀏覽器中獲得下面錯誤結果。

由於上面結果就無法被我們的常規異常***所捕獲,因此不會輸出經過封裝好的異常資訊。

所以如果需要攔截,我們需要增加自己的訊息**處理,用來捕獲這些特殊的異常資訊。

///

///api自定義錯誤訊息處理委託類。

///用於處理訪問不到對應api位址的情況,對錯誤進行自定義操作。

/// public

class

customerrormessagedelegatinghandler : delegatinghandler

if (error != null

) );

}else

});}

}

同時,在webapiconfig中,註冊上相關處理

有了以上這兩種異常處理,我們就可以統一我們的呼叫規則,並進行異常記錄和顯示了,非常方便。

首先,以上這兩種異常處理,我們就可以統一我們的呼叫規則,但是對於webapi裡面異常的處理機制,可能還不夠深入,但對於一般專案的異常處理基本夠用。其他朋友,如果還有什麼更好的方案,還望不吝賜教,感謝感謝!

其次,我們目前使用的異常處理,參考於

Web API系列 三 統一異常處理

前面講了webapi的安全驗證和引數安全,不清楚的朋友,可以看看前面的文章,web api系列 二 介面安全和引數校驗 本文主要介紹web api異常結果的處理。作為內部或者是對外提供的統一webapi 介面,統一的異常處理,把正確的資訊返回給呼叫者很重要。這樣可以讓介面開發人員,了解具體的原因所在...

Web API系列 三 統一異常處理

前面講了webapi的安全驗證和引數安全,不清楚的朋友,可以看看前面的文章,web api系列 二 介面安全和引數校驗 本文主要介紹web api異常結果的處理。作為內部或者是對外提供的統一webapi 介面,統一的異常處理,把正確的資訊返回給呼叫者很重要。這樣可以讓介面開發人員,了解具體的原因所在...

三 統一異常處理器配置

在springmvc.xml配置統一異常處理器。在web.xml中配置 前端控制器知道全域性異常處理器id為handlerexceptionresolver servlet class org.springframework.web.servlet.dispatcherservlet servlet...