微軟的 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中...