• Microsoft .NET
  • ASP.NET
  • Доступ к данным с помощью элементов управления источником данных (DataSource) в ASP.NET 2.0

Два перехватчика: HttpModule и HttpHandlers

ОГЛАВЛЕНИЕ

Часто необходимо реализовать логику предварительной обработки прежде, чем запрос достиг ресурсов IIS. Например, надо применить механизм защиты, замену URL, отфильтровать что-то в запросе и т. д. ASP.NET предоставляет два типа перехвата - HttpModule и HttpHandler.  Данная статья описывает их.

•    Скачать исходники и демо - 12.02 Кб

Задача

То и дело необходимо вставить какую-то логику перед запросом страницы. Часто используемой логикой предварительной обработки являются счетчики статистики, замена URL, аутентификация / авторизация и многие другие. Это можно делать в отделенном коде, но это приводит к сложному и запутанному коду. Отделенный код не решит задачу, потому что в ряде реализаций вроде авторизации логика должна выполняться до достижения ею ресурса. ASP.NET предоставляет два способа вставки логики в канал запроса - HttpHandlers и HttpModules.

HttpHandler – препроцессор на базе расширения

HttpHandler помогает вставить логику предварительной обработки на базе расширения запрошенного имени файла. Когда запрашивается страница, HttpHandler выполняется на базе расширения имени файла и на базе глагола. Рисунок ниже показывает, как разные обработчики увязаны с расширением файла. Можно увязать один обработчик с несколькими расширениями файлов. Например, когда любой клиент запрашивает файл с расширением ‘GIF’ и ‘JPEG’, выполняется логика предварительной обработки handler3.

HttpModule – препроцессор на базе события

HttpModule – метод вставки логики предварительной обработки перед запросом любого ресурса на базе события. Когда любой клиент отправляет запрос на ресурс, канал запроса порождает много событий, как показано на рисунке ниже:

Ниже дано подробное объяснение событий.
•    BeginRequest: Запрос был запущен. Если надо сделать что-то в начале запроса (например, отобразить рекламные баннеры вверху каждой страницы), синхронизируйте это событие.
•    AuthenticateRequest: Если надо встроить пользовательскую схему аутентификации (например, найти пользователя в базе данных для проверки пароля), постройте модуль, синхронизирующий это событие и аутентифицирующий пользователя нужным образом.
•    AuthorizeRequest: Это событие используется внутри для реализации механизмов авторизации (например, для хранения списков контроля доступа (ACL) в базе данных, а не в файловой системе). Хотя можно переопределить данное событие, для этого мало веских причин.
•    PreRequestHandlerExecute: Это событие происходит перед выполнением обработчика HTTP.
•    PostRequestHandlerExecute: Это событие происходит после выполнения обработчика HTTP.
•    EndRequest: Запрос завершился. Можно построить модуль отладки, собирающий информацию в течение всего запроса и затем выводящий информацию на страницу.

Можно зарегистрировать эти события в HttpModules. Когда выполняется канал запроса, в зависимости от зарегистрированного события, обрабатывается логика из модулей.

Общая картина обработчика и модулей

Изучив основы, пора рассмотреть определение Microsoft для обработчика и модулей, чтобы получить общую картину.

Ссылка: Информация: Обзор модулей HTTP и обработчиков HTTP ASP.NET

“Модули вызываются до и после выполнения обработчика. Модули позволяют разработчикам перехватить, участвовать в или изменить каждый отдельный запрос. Обработчики применяются для обработки отдельных запросов конечной точки. Обработчики позволяют каркасу ASP.NET обрабатывать отдельные HTTP URL или группы расширений URL внутри приложения. В отличие от модулей, только один обработчик используется для обработки запроса”.

Читайте также:
  • Взаимодействие Flex с веб-службой ASP.NET
    •    Скачать исходники - 3.45 Кб•    Скачать тест - 1.08 Кб Помните, что веб-служба – всего лишь средство. Есть много других средств вроде HTTPService, дистанционная связь Flex и т. д. Справка В статье Flex HTTPService с ASP.NET на CodeProject показано использование тега flex <mx:HTTPServi...
  • Изучение кэширования в ASP.NET
    Введение Большее число клиентов означает большее число запросов к веб-серверу и тяжелую нагрузку на сеть, вызывающую падение производительности. Для решения этой проблемы было применено кэширование в веб-приложении. Большинство описанных в статье вещей известно многим читателям, но статья была на...
  • Повышение производительности веб-сайта ASP.NET
    Если веб-приложение, вызывающее много служб и загружающее много данных на каждой странице с множеством фоновых вычислений из базы данных, тормозит - то надо сделать: 1. Сжатие HTTP Сжатие HTTP сжимает содержимое страницы на сервере. Оно сжимает запросы и ответы HTTP, что значительно повышает про...
  • Веб-формы ASP.NET и ASP.NET MVC в ладу друг с другом
    •    Скачать исходники - 442 KB Снимки экрана Простая демонстрация в действии. Первый снимок экрана обслуживается из классической веб-формы с URL: http://localhost:41650/Src/ClassicWebforms/Home.aspx. Второй обслуживается из приложения MVC действием "индекс контроллера «главная страница". URL: ...
  • Доступная производственная архитектура программного обеспечения как услуги на базе ASP.NET и SQL Server
    Введение Имеется популярный продукт ASP.NET+SQL Server, растущий со скоростью тысяча пользователей в день, и достигнут предел возможностей вашего собственного хостинга. Теперь, имея достаточно денег в кармане, вы планируете переехать на сторонний хостинг, возможно, на совместное размещение или на...