Приложение ASP.NET, размещенное на IIS7, которое игнорирует пользовательские ошибки и использует ошибки IIS. - PullRequest
12 голосов
/ 02 июля 2010

У меня есть веб-приложение ASP.NET 4.0 для веб-форм C #, которое по какой-то причине использует маршрутизацию для URL-адресов, поэтому пользовательские ошибки, определенные в разделе system.web моего web.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 вместомое приложение полностью обходит Elmah, правильно регистрируя мои 404 исключения.

Редактировать: Просто чтобы избежать каких-либо предположений, я добавил конфигурацию httpErrors только после того, как customErrors перестало работать, чтобы у меня было что-нибудь.1013 *

Ответы [ 3 ]

14 голосов
/ 18 июля 2010

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

  Response.TrySkipIisCustomErrors = true;

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

10 голосов
/ 02 октября 2012

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

Response.TrySkipIisCustomErrors = true;

Используйте это в Web.config:

<httpErrors errorMode="Custom" existingResponse="Replace">
3 голосов
/ 26 июня 2013

Вы можете пройти через сообщения об ошибках IIS7 по умолчанию двумя способами Один из них - установить response.TrySkipIisCustomErrors = true

response.TrySkipIisCustomErrors = true;
response.Status = response.Status;

По некоторым причинам, TrySkipIisCustomErrors не учитывается, если вы не установили response.Status.

Другой способ - установить для существующего ответа значение «PassThrough» в файле web.config

<configuration>
  <system.webServer>
    <httpErrors existingResponse="PassThrough" />
  </system.webServer>
</configuration>

Но при этом будут игнорироваться все настроенные страницы ошибок IIS.

...