Когда в 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;
}
Просто во избежание сомнений, я не ищу решение, почему возникло исключение (у меня это есть), просто как лучше всего обрабатывать исключения такого типа).