WebAPI StackOverflowException响应

时间:2013-12-04 11:22:29

标签: c# asp.net json asp.net-web-api elmah

当在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;
    }

为了避免疑问,我不是在寻找解决为什么发生异常(我有那个)以及如何最好地处理这些类型的异常的情况。)

1 个答案:

答案 0 :(得分:0)

是的,StackOverflowException是特殊情况异常的句柄之一,无法以正常方式处理。

有一些关于如何处理它的信息here