如何在 Web API 中擷取 SerializationException?
我有一個 ASP.NET Web API Web 服務,它在某些情況下會引發 SerializationException。問題是我無法在伺服器端擷取和記錄此異常——它顯示的唯一位置是對客戶端的 HTTP 響應正文。
我按照 ASP.NET Web API
ExceptionFilterAttribute中的異常處理中的描述註冊了一個,並驗證了當我在控制器中引發異常時它可以正常工作。不幸的是,在響應期間(在控制器之後)拋出了 SerializationException,並且似乎被 ASP.NET 完全吞沒了。我也嘗試在 Global.asax.cs 中掛接,但它也沒有出現在那裡。Application_Error()如何在 Web API 響應期間擷取 SerializationException 異常?
如果您使用該方法而不是返回一個對象,而是使用該
ApiController.CreateResponse()方法並返回HttpResponseMessage您可以執行的操作response.Content.LoadIntoBufferAsync().Wait(),這將強制序列化在您仍在操作中時發生,因此可以擷取異常。
順便說一句,響應的序列化實際上發生在主機層(在 HttpControllerHandler 中,當託管在 IIS 和 HttpSelfhostServer 中,當託管在 SelfHost 中時),它位於堆棧下方,而不是在從操作返迴響應之後立即發生。
WebAPI 堆棧海報:http ://www.asp.net/posters/web-api/ASP.NET-Web-API-Poster-grayscale.pdf
也就是說,我無法想出一個直接的方法來實現這一點。這很麻煩,但可能會覆蓋預設的 Xml 和 Json 格式化程序的 WriteToStreamAsync 方法和 try-catch-log 任何異常?
或者,您可以啟用 Web API 跟踪,這將記錄序列化期間發生的異常。但是,是的,如果您不知道導致序列化錯誤的請求,那麼您可能希望始終啟用跟踪,我不確定您可能想要做的事情。