Итак, каким образом модуль HTTP самостоятельно включается в конвейер обработки запросов ASP.NET? Он делает это подобно файлу global.asax. По сути, когда создается модуль HTTP, он регистрируется для получения специфических глобальных событий приложения. Например, если модуль связан с аутентификацией, он зарегистрирует сам себя для получения событий аутентификации. Каждый раз при возникновении этих событий ASP.NET вызывает интересующие модули HTTP. Модуль HTTP инициирует свои события с помощью кода делегата в методе Init().
Интерфейс IHttpModule определяет два метода, которые показаны в табл. 5.5.
Таблица 5.5. Члены IHttpModule
Член | Описание |
---|---|
Init() | Этот метод позволяет модулю HTTP зарегистрировать свои обработчики
событий для получения событий объекта HttpApplication. Этот метод
предлагает текущий объект HttpApplication для запроса в качестве параметра. |
Dispose() | Этот метод дает модулю HTTP возможность выполнять любую очистку до того,
как объект будет удален сборщиком мусора. |
Следующий класс является специальным модулем HTTP, который обрабатывает событие HttpApplication.AuthenticateRequest, а затем регистрирует информацию пользователя в новой записи журнала событий Windows с помощью класса EventLog из пространства имен System.Diagnostics. Чтобы использовать этот пример, учетная запись, применяемая для запуска кода ASP.NET, должна иметь разрешение на запись в журнал событий.
using System;
using System.Web;
using System.Diagnostics;
namespace HttpExtensions
{
public class LogUserModule : IHttpModule
{
public void Init(HttpApplication httpApp)
{
// Attach application event handlers.
httpApp.AuthenticateRequest += new EventHandler(OnAuthentication);
}
private void OnAuthentication(object sender, EventArgs a)
{
// Get the current user identity.
string name = HttpContext.Current.User.Identity.Name;
// Log the user name.
EventLog log = new EventLog();
log.Source = "Log User Module";
log.WriteEntry(name + " was authenticated.");
}
предыдущая следующая страница оглавление
250