編輯:Issue on GitHub here。在南希捕獲序列化錯誤
與南希玩周圍的第一次寫了這個簡單的端點基於Accept
頭測試內容協商:
public HomeModule()
{
Get["/"] = _ => new { Foo = "Bar" };
}
使用Postman,我設置Accept: application/json
,並如預期的結果,而Accept: text/xml
產生文本:
時發生錯誤,生成XML文檔
經過一些試驗和錯誤,我發現這是由匿名類型引起的,這是關於XmlSerializer的單獨問題。但是,我無法弄清楚如何在任何地方捕獲這個序列化錯誤。就像它在南希或ASP.NET的某個地方「吞噬」。上述消息作爲文本返回給請求者,狀態碼爲200 OK。
儘管有安裝Visual Studio來上所有例外打破以及掛接到pipelines.OnError
和Application_OnError
,我沒有得到任何跡象表明發生了錯誤。我不確定這是否是一般的序列化程序,ASP.NET或Nancy的問題(或者我錯過了某些明顯的東西)。
// in bootstrapper's ApplicationStartup method:
pipelines.OnError += (ctx, ex) => {
System.Diagnostics.Trace.WriteLine(ex?.ToString()); // doesn't fire
return null;
};
// in Global.asax:
protected void Application_Error(object sender, EventArgs e)
{
var err = Server.GetLastError();
System.Diagnostics.Trace.WriteLine(err?.Message);
}
爲什麼這個錯誤不被拋出/可捕獲?
謝謝回答,傑夫。我意識到XmlSerializer是關於序列化的罪魁禍首,並且修復很容易。我的問題涉及這樣的事實,即錯誤隱藏在200 OK響應後面,我發現它很奇怪。我希望能夠在某處捕獲/記錄錯誤。你能對此有所瞭解嗎? – bernhof
謝謝,所以*有*錯誤,但它被DefaultXmlSerializer隱藏起來。我現在想知道這是爲什麼。再說一次,當發生這樣的錯誤時,我不會期望** 200 OK **響應,但是我會在GitHub上提出一個問題:乾杯! – bernhof