Кто не заглядывает вдаль, того ждут близкие проблемы. © Конфуций в раздел...
Классической рекомендацией по обработке ошибкок в ASP.NET является настройка элемента <customErrors> в файле Web.config. Но при этом возникает существенная проблема, обрабатывая ошибку внутри, среда выполнения выдает "на улицу" код HTTP 200. А это не соответствует действительности.
Это не проблема, когда ошибку 404 получает пользователь, мы услужливо подсовываем ему страничку с вариантами перехода по "правильным" URL, так что все довольны. Но если агентом выступает поисковик, случается беда. Странички с запрошенным URL нет на сервере, допустим мы ее просто грохнули, но поисковик, в процессе индексации сайта, запросив отсутствующую страничку, пролучает HTTP 200 OK и считает что страничка есть, выдавая пользователям "битые" линки.
Таким образом, если Вы занимаетесь оптимизацией своего сайта для поисковых систем, или разрабатываете сайт, с учетом оптимизации под поисковики, обратите внимание на эту, может и незначительную, но засаду, оставленную нам всем Биллом =)
Решить описанную проблему "штатными" средствами, т.е. простым переконфигурированием среды исполнения, мне не удалось. Не буду утверждать категорично, возможно, просто плохо старался, но не удалось. В качестве пути решения я выбрал программирование собственного фильтра, перехватывающего ошибки среды исполнения ASP.NET и реагирующего исключительно на 404-ю ошибку.
Цель при поиске решения ставилась простая, настроить обработку ошибки 404 таким образом, чтобы программирования было по-минимуму, задача была решена и стандартный механизм продолжил работать. Т.е. делать по-минимуму, а получить по-максимуму =)
Для обеспечения дружественного пользователю интерфейса (и сохранения лица при ошибке =) верстается статическая страничка, например 404.html, и помещается в выбранную локацию. В моем случае - в корневой каталог сайта. Эта страничка будет выдаваться пользователю в том случае, если он запросит несуществующий URL.
Статической данная страничка верстается по той причине, что статику можно будет указать в качестве странички 404 в IIS, добившись, таким образом, симпатичной реакции на запросы не только динамики, но и статики.
Требования к содержанию страницы не предъявляются, однако все "столпы" настоятельно рекомендуют разместить на ней список URL типа "куда податься", чтобы облегчить пользователю поиск нужного URL. В моем случае на ней размещены:
Код моей страницы можно посмотреть, набрав в броузере URL http://www.novojonov.ru/404.html.
В файле Web.config мы настраиваем обработку ошибок традиционным образом, например так:
<customErrors mode="On" defaultRedirect="~/error.html" />
Обратите внимание на то, что обработка ошибки 404 исключена из настройки системы. Это сделано потому, что мы собираемся обрабатывать ее самостоятельно, помните?
Обработка ошибок будет осуществляться в файле Global.asax. Для этого создадим обработчик события Application_Error, например такой:
protected void Application_Error(object sender, EventArgs e) { HttpContext oHttpContext; Exception oException; oHttpContext = HttpContext.Current; oException = oHttpContext.Server.GetLastError(); if (oException is HttpException) { switch ((oException as HttpException).GetHttpCode()) { case 404: oHttpContext.Response.StatusCode = 404; oHttpContext.Response.StatusDescription = "Not Found"; oHttpContext.Response.Charset = "windows-1251"; oHttpContext.Server.Execute("~/404.html"); oHttpContext.Server.ClearError(); break; } } }
Механизм обработки ошибки 404 в ASP.NET действует по следующему алгоритму:
Обработка ошибки включает в себя следующие шаги:
За счет подобного фильтра я обрабатываю только те ошибки, которые мне интересны, т.е. пересматриваю стандартную реакцию системы. Остальные-же ошибки обрабатываются стандартным образом средой исполнения ASP.NET.
Таким образом, мы получили систему, которую хотели, пусть незначительно, но усовершенствовав механизм обработки ошибок в ASP.NET. Пользователи, как и раньше, получают дружественную страничку, поисковики, при запросе несуществующего URL, получают чистую правду АКА 404, сайт реагирует в соотвествии с общепринятыми стандартами.
Вы можете копировать контент, представленный на этой странице, повторно публиковать его, вносить изменения, изменять оформление (и пр.), при условии размещения в любом месте скопированной страницы любого цвета, размера и стиля шрифта индексируемой ссылки вида:
Контент (прохождение, статья, и т.д.) предоставлен сайтом Территория Дмитрия Новоженова
Сайт "Территория Дмитрия Новоженова" © 2024 год. Программирование на ASP.NET, написание программ на C#, самописные утилиты. Разборки с компьютерами, сетевым оборудованием и другим железом. Коллекции изображений, библиотеки иконок, которые можно скачать и сохранить локально, рисунков и других картинок. Личный фотоальбом, ссылки на фотогаллереи на других сайтах и другие ресурсы посвященные фотографии. Каталог игр на PlayStation 2, тактика прохождения игр, обзоры игр на PlayStation 2. Тематические сборники статей, новости сайта.