Почему моя переадресация 404 не работает в моем файле web.config?

В моем приложении у меня есть пользовательская ошибка для обнаружения всех непредвиденных ошибок и 404, когда пользователь пытается перейти на несуществующую страницу. Проблема в том, что в рабочей среде я могу успешно перейти на страницу с ошибкой, либо введя путь к URL-адресу в окне браузера, либо неправильно используя приложение, но я не могу сделать то же самое с ошибкой 404. Вот мои настройки. введите изображение  описание здесь


person Skullomania    schedule 17.04.2017    source источник
comment
попробуйте <clear /> все текущие правила, прежде чем указывать новые.   -  person Andrii Litvinov    schedule 17.04.2017
comment
@AndriiLitvinov очистка внутри пользовательских ошибок приводит к ошибке 500, это также происходит, если я помещаю ее перед пользовательскими ошибками   -  person Skullomania    schedule 17.04.2017
comment
Ладно, мой плохой, перепутал с httpErrors.   -  person Andrii Litvinov    schedule 17.04.2017
comment
где не работает? на вашем рабочем столе работает IISExpress? На развернутом экземпляре сервера где-то работает IIS?   -  person No Refunds No Returns    schedule 17.04.2017
comment
Он не работает в производстве на сервере IIS IIS 8   -  person Skullomania    schedule 17.04.2017


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