【问题标题】:WebAPI StackOverflowException responseWebAPI StackOverflowException 响应
【发布时间】:2013-12-04 11:22:28
【问题描述】:

当在 WebAPI 中引发未处理的异常时,通常由 ELMAH(在我的安装中)记录,并向我可以读取的 jqXHR 对象返回一个合理的响应。

但我在解析一些结构不良的 JSON 时遇到了(现在已解决)问题,导致 StackOverflowException,在 Deserialize 方法中(下面的代码,仅用于上下文)。

我的问题是这没有被视为未处理的异常,而是(我认为是 IIS)返回了 500 响应,并带有 HTML 页面“内部服务器错误”和消息“服务暂时不可用”。

因此,这意味着我的 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;
    }

为了避免疑虑,我并不是在寻找解决异常发生原因的方法(我知道如何最好地处理这些类型的异常)。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢威尔。知道 try/catch 不会捕获自 .NET2.0 以来运行时抛出的 StackOverflowException 很有用。节省了我浪费时间与他们一起包装我的服务。
    猜你喜欢
    • 2016-12-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    • 1970-01-01
    • 2013-06-06
    • 1970-01-01
    • 2018-02-20
    相关资源
    最近更新 更多