Пользовательская ошибка IIS 404 не работает должным образом

Я работаю над IIS6, ASP.NET, VS2008. Веб-сайт использует собственный обработчик ошибок, чтобы уловить 404 ошибки и выполнить альтернативную страницу. Когда представлен URL-адрес формы:

http://srv/crimson/articles/index

Все работает отлично. Но URL-адрес формы:

http://srv/crimson/blog.aspx

Где не существует blog.aspx, не удается выполнить следующее сообщение:

Ошибка сервера в приложении "/Crimson". Описание: HTTP 404...

Когда я пытаюсь и отлаживаю, ни одна из контрольных точек в моем обработчике 404 не попадает. Таким образом, похоже, что что-то ловит запрос раньше. Где? И как мне передать запрос на мой обработчик?

Edit Спасибо тем, кто ответил, но ни одна из этих идей не работала. Я решил атаковать проблему по-другому.

Ответ 1

Вы можете попробовать:

В IIS6:

  • открыть "свойства" для вашего сайта.
  • перейдите на вкладку "домашний каталог".
  • нажмите "Конфигурация"
  • найдите расширение ".aspx"
  • нажмите "изменить"
  • установите флажок, подтверждающий, что файл существует.

изменить

А как насчет этого: http://msdn.microsoft.com/en-us/library/h0hfz6fc(VS.80).aspx

<customErrors defaultRedirect="sorry.htm" mode="On">  
     <error statusCode="404" redirect="NotFound.aspx"/>
</customErrors>

Поскольку "RemoteOnly" указывает, что пользовательские ошибки отображаются только для удаленных клиентов, а ошибки ASP.NET отображаются локальному хосту.

Ответ 2

hmm, Ассаф прав, но чтобы добавить к его ответу, мне нужно опубликовать код.

Да, Assaf означает нечто иное. ASP.NET предлагает собственную обработку ошибок, настроенную через web.config. Вы можете управлять этим с помощью привязки администратора IIS или непосредственно в файле web.config.

Внутри < system.web > элемент, который вы должны иметь:

<customErrors defaultRedirect="sorry.htm" mode="RemoteOnly">
  <error statusCode="404" redirect="NotFound.aspx"/>
</customErrors>

Вы можете настроить другую страницу для каждого кода ошибки HTTP или позволить переадресации по умолчанию обрабатывать их все.

Вы обнаружите, что вам действительно нужно установить эти страницы ошибок в как пользовательские ошибки IIS и конфигурацию ASP.NET, так как в противном случае вы попадете в эту ситуацию - некоторые страницы идут на ваш 404, а другие используют по умолчанию, которые вы не настроили.

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

Response.StatusCode = 404;
Response.StatusDescription = "Not found";

Ответ 3

ASP.Net имеет собственную конфигурацию собственных ошибок.

Перейдите в конфигурацию ASP.Net своего виртуального каталога (веб-приложение) и щелкните правой кнопкой мыши → ASP.Net → Изменить конфигурацию → Пользовательские ошибки.

Ответ 4

Возможно, у вас есть 500, поэтому перенаправление для 404 не запускается. Вы можете сначала сосредоточиться на этой ошибке 500.