ASP.net web.config не улавливает все 404

63
5

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

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

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

http://127.0.0.1/scirranew/invalidpath

http://127.0.0.1/scirranew/invalidpath.aspx

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

спросил(а) 2021-01-26T18:36:30+03:00 4 месяца, 4 недели назад
1
Решение
108

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

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

ответил(а) 2021-01-26T18:36:30+03:00 4 месяца, 4 недели назад
77

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

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

ответил(а) 2021-01-26T18:36:30+03:00 4 месяца, 4 недели назад
78

У меня есть 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" отличается от path = "~/404.aspx" или path = "404.aspx"

ответил(а) 2021-01-26T18:36:30+03:00 4 месяца, 4 недели назад
63

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

ответил(а) 2021-01-26T18:36:30+03:00 4 месяца, 4 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема