编辑: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