У меня есть приложение ASP.NET MVC, которое возвращает 404, а иногда и 500 кодов состояния в различных подходящих точках.
Response.StatusCode = (int)HttpStatusCode.NotFound;
Когда я устанавливаю один из этих кодов состояния, я также соответствующим образом устанавливаю свойство TrySkipIisCustomErrors.
Response.TrySkipIisCustomErrors = true
Что я хотел бы сделать сейчас, так это настроить IIS для прохождения этих ошибок, которые я сам настраиваю, и перехватывать любые другие ошибки, которые могут возникнуть (например, 404-е для статических файлов, когда я не отправляю запросы в ASP .NET, или 500 ошибок в моем приложении (где предположительно свойство TrySkipIisCustomErrors не будет установлено платформой).
Мой узел system.webServer / httpErrors выглядит так:
<httpErrors existingResponse="Auto" errorMode="Custom">
</httpErrors>
Это возвращает мои собственные ошибки ASP.NET, в которых я установил TrySkipIisCustomErrors = true, и стандартные страницы ошибок IIS для неперехваченных 500 с, статический файл 404 с и т. Д.
Затем я попытался изменить его так:
<httpErrors existingResponse="Auto" errorMode="Custom" defaultPath="/Skins/Shared/Error/Error.html" defaultResponseMode="ExecuteURL">
<clear />
</httpErrors>
Я считаю, что это должно отобразить мою страницу ошибок вместо стандартной страницы IIS. Однако, когда я добавляю этот код, я получаю однострочную ошибку IIS («Невозможно отобразить страницу, потому что произошла внутренняя ошибка сервера»), и он возвращает код состояния 500.
Полагаю, это связано с ошибкой в моей конфигурации, но я не могу понять, что я делаю неправильно!
Я также пробовал этот подход, с теми же результатами:
<httpErrors existingResponse="Auto" errorMode="Custom" defaultPath="Skins\Shared\Error\Error.html" defaultResponseMode="File">
<clear />
</httpErrors>
Та же проблема возникает даже при установке перенаправления на совершенно другой URL.
Я использую эту страницу среди других для справки: http://blogs.iis.net/ksingla/archive/2008/02/18/what-to-expect-from-iis7-custom-error-module.aspx.
Файл ошибок определенно существует, и я могу напрямую открыть его с помощью браузера.
Кроме того, я не совсем уверен, что мне следует делать с узлом system.Web \ customErrors. Это настройка только для IIS6 или она как-то связана с ASP.NET? В настоящее время я не включаю его в свой web.config.