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 12

5 ответов:

Чтобы отключить сообщения об ошибках IIS, необходимо установить

  Response.TrySkipIisCustomErrors = true;

На странице ошибок. После этого ваши сообщения об ошибках должны отображаться без проблем.

Вместо использования:

Response.TrySkipIisCustomErrors = true;

Используйте это в Сети.конфигурация:

<httpErrors errorMode="Custom" existingResponse="Replace">

Вы настроили маршрут, чтобы игнорировать ошибки и 404?

Это обсуждается в обзорных руководствах MVC. Поведение ошибок IIS зависит от вашей версии IIS.

Использование ASP.NET MVC с различными версиями IIS (C#)

Сообщения об ошибках по умолчанию 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.