Получите все 404 для работы на IIS6 - PullRequest
1 голос
/ 07 декабря 2009

Я следовал советам по настройке 404s:

http://www.andornot.com/about/developerblog/archive/2009_10_01_archive.aspx

и связанных с ним:

Лучший способ реализовать 404 в ASP.NET

Из Global.asax:

protected void Application_Error(Object sender, EventArgs e)
{   
    Exception exception = Server.GetLastError();
    if (exception is HttpUnhandledException)
    {
        if (exception.InnerException == null)
        {
            Server.Transfer(string.Format("~/Error.aspx", false));
            return;
        }
        exception = exception.InnerException;
    }

    if (exception is HttpException)
    {
        if (((HttpException)exception).GetHttpCode() == 404)
        {
            Server.ClearError();
            Server.Transfer("~/404.aspx", false);
            return;
        }
    }

    if (Context != null && Context.IsCustomErrorEnabled)
    {
        Server.Transfer(string.Format("~/Error.aspx"), false);
    }

}

И из Web.config:

<customErrors mode="On"/>

Все это прекрасно работает локально во время тестирования (VS2010), но в производстве (ISS6) это работает только для страниц aspx. http://mysite.se/foo.js достань мне страницу МКС 404. («Страница не найдена»)

Что мне не хватает?

Ответы [ 2 ]

4 голосов
/ 07 декабря 2009

Если вы не хотите настраивать сопоставления с подстановочными знаками или если ASP.NET обрабатывает все ваши статические файлы (и, как правило, производительность может сказать, что вы этого не делаете), вам нужно настроить IIS 6 для отправки 404-х в aspx страница, которая обрабатывает ошибки.

  1. Откройте диспетчер IIS, перейдите к нужному сайту, щелкните его правой кнопкой мыши и выберите «Свойства».
  2. Откройте вкладку «Пользовательские ошибки».
  3. Прокрутите вниз до 404, выберите его и нажмите «Изменить ...».
  4. Измените тип сообщения на URL и укажите его на файле , который существует на вашем сервере (i.e "/404.aspx").

Ключ 4 - это ключ - он должен указывать на существующий файл, в противном случае IIS вернется к значению по умолчанию.

2 голосов
/ 07 декабря 2009

Обработчик 404, указанный в Web.Config, работает только с файлами, обрабатываемыми средой выполнения ASP.NET, все остальные, включая файлы JavaScript, будут обрабатываться страницей 404, указанной в настройках IIS. По этой причине вы видите сообщение об ошибке, сгенерированное IIS для http://mysite.se/foo.js, вместо того, которое указано в разделе пользовательских ошибок Web.Config.

Однако вы можете сопоставить эти типы файлов с aspnet_isapi.dll, чтобы они обрабатывались вашими пользовательскими страницами ошибок.

  1. Открыть IIS Manager
  2. Выберите свой веб-сайт
  3. Щелкните правой кнопкой мыши в контекстном меню. выберите Свойства
  4. В столбце Расширение найдите .aspx, дважды щелкните и скопируйте полный путь к aspnet_isapi.dll. Это должно быть что-то вроде C: \ WINDOWS \ Microsoft.NET \ Framework \ v1.1.4322 \ « aspnet_isapi.dll
  5. Нажмите кнопку Добавить и вставьте путь в поле «Исполняемый файл»
  6. В поле Расширение введите .html
  7. Убедитесь, что файл существует НЕ проверено
  8. Закрыть все диалоги

См. здесь для получения дополнительной информации.

...