ASP.NET приложение, размещенное на IIS7, которое игнорирует пользовательские ошибки и возвращается к ошибкам IIS
У меня есть веб-формы C# ASP.NET 4.0 веб-приложение, которое использует маршрутизацию для URL-адресов по какой-то причине пользовательских ошибок, определенных в системе.веб-раздел моей паутины.config полностью игнорируется, и он будет падать обратно ошибки IIS.
Это полностью игнорируется
<system.web>
<customErrors mode="On">
<error statusCode="500" redirect="~/Error" />
<error statusCode="404" redirect="~/404" />
<error statusCode="403" redirect="~/Error" />
</customErrors>
</system.web>
Эта часть берет на себя
<system.webServer>
<httpErrors>
<!--<clear />-->
<remove statusCode="500" subStatusCode="-1" />
<remove statusCode="404" subStatusCode="-1" />
<error statusCode="404" subStatusCode="-1" path="/App1/404" responseMode="Redirect" />
<error statusCode="500" prefixLanguageFilePath="" path="/App1/Error" responseMode="Redirect" />
</httpErrors>
</system.webServer>
Это было бы незначительным неудобством, за исключением того, что он возвращается к IIS native вместо моего приложения, оно полностью обходит elmah, регистрируя мои 404 исключения правильно.
Edit: просто чтобы избежать каких-либо предложений такого рода, я только добавил конфигурацию httpErrors после того, как customErrors перестали работать, так что у меня было бы что-нибудь.
5 ответов:
Чтобы отключить сообщения об ошибках IIS, необходимо установить
Response.TrySkipIisCustomErrors = true;
На странице ошибок. После этого ваши сообщения об ошибках должны отображаться без проблем.
Вместо использования:
Response.TrySkipIisCustomErrors = true;
Используйте это в Сети.конфигурация:
<httpErrors errorMode="Custom" existingResponse="Replace">
Сообщения об ошибках по умолчанию IIS7 можно передавать двумя способами Один из них-установить реакцию.TrySkipIisCustomErrors = true
response.TrySkipIisCustomErrors = true; response.Status = response.Status;
По какой-то причине TrySkipIisCustomErrors не считается почетным, если вы не устанавливаете ответ.Статус.
Другой-установить existingResponse на "PassThrough" в web.config
<configuration> <system.webServer> <httpErrors existingResponse="PassThrough" /> </system.webServer> </configuration>
Но при этом будут игнорироваться все настраиваемые страницы ошибок IIS.