В моем приложении у меня есть пользовательская ошибка для обнаружения всех непредвиденных ошибок и 404, когда пользователь пытается перейти на несуществующую страницу. Проблема в том, что в рабочей среде я могу успешно перейти на страницу с ошибкой, либо введя путь к URL-адресу в окне браузера, либо неправильно используя приложение, но я не могу сделать то же самое с ошибкой 404. Вот мои настройки.
Почему моя переадресация 404 не работает в моем файле web.config?
Ответы (1)
Error/NotFound
будет работать вместо ~/Error/NotFound
, и пользовательские ошибки должны быть включены (в зависимости от того, откуда вы делаете запросы):
<customErrors mode="On" defaultRedirect="Error">
<error statusCode="404" redirect="Error/NotFound" />
</customErrors>
А также установить httpErrors
:
<system.webServer>
<httpErrors errorMode="Custom" existingResponse="PassThrough">
<clear />
<error statusCode="404" responseMode="ExecuteURL" path="/Error/NotFound" />
</httpErrors>
</system.webServer>
Помните, что clear
удалит статические файлы для всех ошибок. Так что рассмотрите возможность разблокировать набор defaultPath
из httpErrors
.
person
Andrii Litvinov
schedule
17.04.2017
Я попробовал это, и это все еще не работает. Он генерирует то же самое, что и ошибка, показанная выше
- person Skullomania; 17.04.2017
Похоже, это потому, что 404 обрабатывается IIS, а не ASP.NET. Попробуйте также переопределить
httpErrors
.
- person Andrii Litvinov; 17.04.2017
@Skullomania, я обновил свой ответ, надеюсь, он поможет. Так было сделано на одном из моих предыдущих проектов.
- person Andrii Litvinov; 17.04.2017
Я добавил ваше обновленное предложение в свой веб-конфиг вместо моих пользовательских ошибок, а также добавил его ниже system.web с тем же результатом. Я понятия не имею, что происходит. Я могу перейти на
notfound
страницу в своем локальном проекте, но не в рабочей среде
- person Skullomania; 17.04.2017
Он заменяет стандартные страницы ошибок IIS. Может быть, этот раздел как-то отключен на производстве? Вы переходите к не найденному на локальном компьютере после изменения
httpErrors
или вы можете сделать это с самого начала?
- person Andrii Litvinov; 17.04.2017
Взгляните также на этот вопрос stackoverflow.com/questions/1888743/
- person Andrii Litvinov; 17.04.2017
Я сделал то, что он предложил, и у меня все еще тот же результат. Я очень близок к тому, чтобы отказаться от этого web.config и переписать его с нуля, просто чтобы понять, в чем проблема.
- person Skullomania; 18.04.2017
Хотя в этом нет смысла, вчера я использовал On вместо RemoteOnly и он заработал. Я не уверен, почему это начало работать, потому что я пробовал это и раньше. Спасибо за помощь!
- person Skullomania; 20.04.2017
Хорошо, приятно знать. Возможно, это связано с тем, что сервер и клиент находились на одной машине.
- person Andrii Litvinov; 20.04.2017
У меня это сработало так:
existingResponse="Replace"
Полный код: <httpErrors errorMode="Custom" existingResponse="Replace"> <clear /> <error statusCode="404" path="/Error/NotFound" responseMode="ExecuteURL" /> </httpErrors>
- person mihkov; 04.12.2017
<clear />
все текущие правила, прежде чем указывать новые. - person Andrii Litvinov   schedule 17.04.2017httpErrors
. - person Andrii Litvinov   schedule 17.04.2017