如何友好的處理 WebApi 中丟擲的錯誤

2021-10-20 23:58:53 字數 2674 閱讀 2700

微軟的 asp.net web api 是乙個輕量級的web框架,可用來構建基於 http 無狀態的rest服務,異常是一種執行時錯誤,異常處理是一種處理執行時錯誤的技術,每乙個開發者都應該知道如何處理 web api 中的異常,並且在 action 中使用合適的錯誤碼錯誤資訊進行包裝。

你可以在 action 中使用 httpresponseexception 來包裝指定的 httpcode 和 httpmessage,如下例子所示:

}如果你的 action 返回的是 ihttpactionresult,那麼可將getemployee()方法修改如下:

}從上面的**可以看出,錯誤碼 和 錯誤訊息 都賦給了 response 物件,然後包裝到了 httpresponseexception 進行返回。

除了直接例項化 httpresponsemessage 類,還可以使用request.createerrorresponse()快捷的建立 httpresponsemessage 類,如下**所示:

public iactionresult getemployee(int id)

return ok(emp);

}

異常過濾器是一種可以在 webapi 中捕獲那些未得到處理的異常的過濾器,要想建立異常過濾器,你需要實現 iexceptionfilter 介面,不過這種方式比較麻煩,更快捷的方法是直接繼承 exceptionfilterattribute 並重寫裡面的onexception()方法即可,這是因為 exceptionfilterattribute 類本身就實現了 iexceptionfilter 介面,如下**所示:

[attributeusage(attributetargets.class | attributetargets.method, inherited = true, allowmultiple = true)]

public abstract class exceptionfilterattribute : filterattribute, iexceptionfilter, ifilter

下面的**片段展示了如何通過重寫exceptionfilterattribute.onexception()方法來建立乙個自定義異常過濾器,請注意下面的**是如何捕獲在 action 中丟擲的異常,並將捕獲到的異常轉換為 httpstatusresponse 實體,然後塞入合適的 httpcode 和 httpmessage,如下**所示:

}}接下來將自定義的異常過濾器新增到 httpconfiguration 全域性集合中,如下**所示:

}除了將自定義異常設定到全域性上,你還可以縮小粒度到 controller 或者 action 級別上,下面的**分別展示了如何將其控制在 action 和 controller 上。

[databaseexceptionfilter]

public class employeescontroller : apicontroller

[customexceptionfilter]

public ienumerableget()

asp.net web api 提供了強大的 httpresponseexception 來包裝異常資訊,預設情況下,當 webapi 中丟擲異常,系統預設使用http statecode = 500作為回應,也即:internal server error.,場景就來了,如果你會用 httpresponseexception 的話,就可以改變這種系統預設行為,自定義錯誤碼和錯誤資訊讓結果更加清晰語義化。

異常的處理 抓拋模型

過程一 拋 程式在正常執行的過程中,一旦出現異常,就會在異常 處生成乙個對應異常類的物件。並將此物件丟擲。一旦丟擲物件以後,其後的 就不再執行。關於異常物件的產生 系統自動生成的異常物件 手動的生成乙個異常物件,並丟擲 throw 過程二 抓 可以理解為異常的處理方式 try catch final...

如何友好的啟動Angular應用

angular應用的index.html會在文件當中寫入根元件,例如 直到angular初始化完成後 loading.字樣才會從頁面消失,並進入實際的應用。當然相比較一版空白著實還算優雅一點。然而乙個好的應用的體驗怎能這樣呢,有興趣的可以先看一下 ng alain 是如何友好的啟動angular的。...

PHP中友好的處理方式

在使用php進行開發的時候,由於php是弱型別語言的特性,所以,偶爾會遇到一些意想不到的錯誤.規範我們的程式設計就變得尤為重要了.下面總結一下,我日常開發中的一些經驗,可能有些地方不妥,還請多多斧正,指教 1 使用php eol替換換行 windows中的換行 r n unix中的換行 n mac中...