ASP.net web.config не перехватывает все 404 - PullRequest
1 голос
/ 02 июля 2011

В моем web.config у меня есть:

    <customErrors mode="On" defaultRedirect="~/Error.aspx" redirectMode="ResponseRewrite">
        <error statusCode="500" redirect="~/Error.aspx" />
        <error statusCode="404" redirect="~/404.aspx" />
    </customErrors>

Однако с этими URL-адресами работает только 2-й с определенным расширением файла, другой возвращает синий экран 404 «Ошибка сервера в приложении».

http://127.0.0.1/scirranew/invalidpath

http://127.0.0.1/scirranew/invalidpath.aspx

Есть идеи? Я на ASP.net 4, IIS 7.5.

Ответы [ 4 ]

5 голосов
/ 02 июля 2011

Если вы хотите, чтобы это работало, вам нужно настроить IIS для передачи всех запросов в .NET engine.Ваш первый пример явно не запрашивает страницу .NET, поэтому она не направляется на механизм .NET.

Какую версию IIS и .NET вы используете? Это может помочь.

2 голосов
/ 27 августа 2014

У меня есть 2 конфигурации в том же web.config

<system.web>
    <customErrors mode="On" defaultRedirect="/error.aspx" redirectMode="ResponseRedirect">
    </customErrors>
</system.web>

, которые вы также можете использовать customErrors mode = "RemoteOnly"

И

<system.webServer>
      <httpErrors errorMode="Custom">
          <remove statusCode="401" subStatusCode="-1" />
          <remove statusCode="403" subStatusCode="-1" />
          <remove statusCode="404" subStatusCode="-1" />
          <remove statusCode="500" subStatusCode="-1" />
          <error statusCode="401" path="/401.aspx" responseMode="ExecuteURL" />
          <error statusCode="403" path="/403.aspx" responseMode="ExecuteURL" />
          <error statusCode="404" path="/404.aspx" responseMode="ExecuteURL" />
          <error statusCode="500" path="/500.aspx" responseMode="ExecuteURL" />
      </httpErrors>
</system.webServer>

Взгляните на путь = "/ 404.aspx" отличается от пути = "~ / 404.aspx" или path = "404.aspx«

2 голосов
/ 02 июля 2011

ASP.Net вызывается только для расширений файлов, зарегистрированных для него в IIS. Поэтому, когда вы переходите на invalidpath IIS проверяет файл, соответствующий этому имени, а затем папку. Если ни один не существует, он вызывает страницу 404, обозначенную в IIS.

В зависимости от вашей версии IIS у вас есть несколько вариантов. В IIS6 вы должны вручную установить страницу 404 из диспетчера IIS. В IIS7 и выше вы можете использовать web.config и изменить раздел system.webServer: http://www.iis.net/ConfigReference/system.webServer/httpErrors

1 голос
/ 17 июля 2012

Кроме того, я бы порекомендовал использовать простые html-страницы для страниц с ошибками, если это возможно, поскольку они намного более надежны. Например, если хранилище сеансов .net недоступно (например, отключена база данных сеансов), страница ошибок будет пытаться перенаправить на страницу ошибок бесконечно! HTML-страницы менее зависимы от подсистемы .net, поэтому с большей вероятностью будут работать, когда что-то начнется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...