Ответ 1
Выполните следующие шаги, чтобы добавить HTTP-модуль:
- Создайте новый проект библиотеки Visual Studio.NET С# с именем
MyModule
. - Установите ссылку на сборку
System.Web.dll
. -
Добавьте в класс следующую директиву:
using System.Web;
-
Переименуйте класс
SyncModule.cs
, а затем измените определение класса, чтобы отразить это. -
Внедрить интерфейс
IHttpModule
. Определение вашего класса должно выглядеть следующим образом:public class SyncModule : IHttpModule
-
Определите, какие события вы будете подписывать. В следующем списке перечислены доступные события из объекта
HttpApplication
, на который вы можете подписаться:-
AcquireRequestState
: Вызовите это событие, чтобы модуль мог получить или создать состояние (например, сеанс) для запроса. -
AuthenticateRequest
: вызывать это событие, когда модуль безопасности должен аутентифицировать пользователя перед его обработкой. -
AuthorizeRequest
: вызывать это событие модулем безопасности, когда запрос должен быть разрешен. Вызывается после аутентификации. -
BeginRequest
: Вызовите это событие, чтобы уведомить модуль о начале нового запроса. -
Disposed
: Вызовите это событие, чтобы уведомить модуль о завершении приложения по какой-либо причине. Позволяет модулю выполнять внутреннюю очистку. -
EndRequest
: Вызовите это событие, чтобы уведомить модуль о завершении запроса. -
Error
: Вызовите это событие, чтобы уведомить модуль об ошибке, которая возникает во время обработки запроса. -
PostRequestHandlerExecute
: Вызовите это событие, чтобы уведомить модуль о завершении обработки обработчиком запроса. -
PreRequestHandlerExecute
: Вызовите это событие, чтобы уведомить модуль о вызове обработчика запроса. -
PreSendRequestContent
: Вызовите это событие, чтобы уведомить модуль о том, что содержимое будет отправлено клиенту. -
PreSendRequestHeaders
: Вызовите это событие, чтобы уведомить модуль о том, что HTTP-заголовки будут отправлены клиенту. -
ReleaseRequestState
: Вызовите это событие, чтобы позволить модулю освободить состояние, потому что обработчик завершил обработку запроса. -
ResolveRequestCache
: вызывать это событие после аутентификации. Модули кэширования используют это событие, чтобы определить, должен ли запрос обрабатываться его кешем или обработчик должен обработать запрос. -
UpdateRequestCache
: Вызовите это событие после ответа обработчика. Кэширующие модули должны обновить свой кэш с ответом.
-
-
Внедрите методы Init и Dispose интерфейса IHttpModule следующим образом:
public void Init(HttpApplication app) { app.BeginRequest += new EventHandler(OnBeginRequest); } public void Dispose(){ }
-
Создайте делегат для события следующим образом:
public delegate void MyEventHandler(Object s, EventArgs e);
-
Определите приватную локальную переменную типа
MyEventHandler
для хранения ссылки на событие:private MyEventHandler _eventHandler = null;
-
Создайте событие, которое подключает делегат к методу в файле или классе Global.asax, который наследует объект
HttpApplication
:public event MyEventHandler MyEvent { add { _eventHandler += value; } remove { _eventHandler -= value; } }
-
Создайте метод
OnBeginRequest
, который подключается к событиюBeginRequest
HttpApplication
:public void OnBeginRequest(Object s, EventArgs e) { HttpApplication app = s as HttpApplication; app.Context.Response.Write("Hello from OnBeginRequest in custom module.<br>"); if(_eventHandler!=null) _eventHandler(this, null); }
-
Скомпилировать проект
источник: http://support.microsoft.com/kb/307996
Добавление HTTP-модуля в ваш web.config
будет выглядеть примерно так:
<system.web>
<httpModules>
<add name="CustomHttpModule" type="MyCustomHttpModule"/>
</httpModules>
</system.web>