当在WebAPI中抛出未处理的异常时,这通常会被ELMAH记录(在我的安装中),并且会向我可以读取的jqXHR对象返回合理的响应。
但是我在Deserialize方法(下面的代码,仅针对上下文)中解析了导致StackOverflowException的一些结构严重的JSON(现在已经解决了)。
我的问题是,这并未被视为未处理的异常,而是(我认为IIS)返回500响应,HTML页面为“内部服务器错误”,并显示消息“服务暂时不可用”。 / p>
因此,这意味着我的JavaScript错误处理程序崩溃,因为它期望JSON,而不是响应中的HTML。
StackOverflowException是一种特殊情况,就其本质而言,不能像其他任何情况一样被视为未处理的异常,或者是否存在ELMAH不记录异常并且还会导致返回HTML消息的其他情况什么时候有JSON?
或者这是否意味着在WebAPI中你必须对所有代码进行try / catch循环并防止出现未处理的异常?
private Models.Stream DeserializeStream(FileInfo dataFileInfo)
{
Models.Stream stream;
using (var streamReader = new StreamReader(dataFileInfo.FullName))
{
using (var reader = new JsonTextReader(streamReader))
{
stream = Serializer.Deserialize<Models.Stream>(reader);
}
}
return stream;
}
为了避免疑问,我不是在寻找解决为什么发生异常(我有那个)以及如何最好地处理这些类型的异常的情况。)