Пользовательская ошибка IIS 404 не работает должным образом - PullRequest
10 голосов
/ 05 марта 2009

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

http://srv/crimson/articles/index

Все отлично работает. Но URL вида:

http://srv/crimson/blog.aspx

Там, где blog.aspx не существует, выдает следующее сообщение:

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

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

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

Ответы [ 4 ]

10 голосов
/ 05 марта 2009

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

В IIS6:

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

1020 * редактировать *

А что по этому поводу: 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 отображаются для локального хоста.

6 голосов
/ 05 марта 2009

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

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

В элементе вы должны иметь:

<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";
1 голос
/ 05 марта 2009

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

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

0 голосов
/ 07 марта 2009

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

...