前面講了webapi的安全驗證和引數安全,不清楚的朋友,可以看看前面的文章,《web api系列(二)介面安全和引數校驗》,本文主要介紹web api異常結果的處理。作為內部或者是對外提供的統一webapi 介面,統一的異常處理,把正確的資訊返回給呼叫者很重要。這樣可以讓介面開發人員,了解具體的原因所在,這樣可以得到有效的錯誤處理。
需要注意的是,webapi異常的狀態碼,盡量不要和業務狀態碼混淆。可以分為兩個不同的字段,或者是狀態碼的規則不同。相關返回資料的格式,可以參考,前面的文章。
常規的程式異常,指的是webapi 介面程式在執行的時候出現的各種異常情況,可以使用異常篩選器捕獲所有異常。
1. api自定義錯誤過濾器屬性:apiexceptionattribute
///2. 定義好了錯誤過濾器,根據實際情況,在不同級別使用統一的異常處理機制。比如,介面action級別,控制器controller級別或者是全域性。///api自定義錯誤過濾器屬性
/// public
class
apiexceptionhandlingattribute : exceptionfilterattribute);}
else
if (context.exception is
timeoutexception));}
//.....這裡可以根據專案需要返回到客戶端特定的狀態碼。如果找不到相應的異常,統一返回服務端錯誤500
else
); }
//記錄關鍵的異常資訊
} }
我們目前的使用的是全域性進行異常過濾。在apibase 增加異常過濾。
[apiauth]對於常規的異常,我們通過上面的處理方式,就可以很好進行攔截並處理了,如果介面異常是全域性性的,如訪問地不正確,或者呼叫的介面就不是有效的位址,這樣的話,返回的資訊就不會被上面的***進行處理了。[apiexceptionhandling]
public
class
apibase : apicontroller
如我們給乙個無效的api呼叫路徑,在瀏覽器中獲得下面錯誤結果。
由於上面結果就無法被我們的常規異常***所捕獲,因此不會輸出經過封裝好的異常資訊。
所以如果需要攔截,我們需要增加自己的訊息**處理,用來捕獲這些特殊的異常資訊。
///同時,在webapiconfig中,註冊上相關處理///api自定義錯誤訊息處理委託類。
///用於處理訪問不到對應api位址的情況,對錯誤進行自定義操作。
/// public
class
customerrormessagedelegatinghandler : delegatinghandler
if (error != null
) );
}else
});}
}
有了以上這兩種異常處理,我們就可以統一我們的呼叫規則,並進行異常記錄和顯示了,非常方便。
首先,以上這兩種異常處理,我們就可以統一我們的呼叫規則,但是對於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...