Создание собственного модуля

Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core

Последнее обновление: 31.10.2015

Интерфейс IHttpModule определяет ряд методов, которые классы модулей должны реализовать:

  • Init(app): вызывается при создании модуля и его передаче объекту HttpApplication, в котором этот модуль регистрируется

  • Dispose(): вызывается, когда обработка запроса завершена. В этом методе происходит освобождение связанных ресурсов

Создадим простейший модуль, который будет измерять время обработки запроса. Для этого добавим в проект новый каталог Modules, в котором будут находиться наши модули. Затем добавим в этот каталог новый класс. Назовем его TimerModule:

using System.Diagnostics;
//.........................
public class TimerModule : IHttpModule
{
    private Stopwatch timer;
    public void Init(HttpApplication app)
    {
        app.BeginRequest += HandleBeginRequest;
        app.EndRequest += HandleEndRequest;
    }
    private void HandleBeginRequest(object src, EventArgs args)
    {
        timer = Stopwatch.StartNew();
    }
    private void HandleEndRequest(object src, EventArgs args)
    {
        HttpContext context = HttpContext.Current;
        context.Response.Write(string.Format(
            "<div style='color:red;'>Время обработки запроса: {0:F5} секунд</div>",
            ((float)timer.ElapsedTicks) / Stopwatch.Frequency));
    }
    public void Dispose()
    {}
}

Для замеров времени используется класс Stopwatch из пространства имен System.Diagnostics.

В методе Init() устанавливаются обработчики для событий начала и завершения обработки запроса. Оба обработчика принимают два параметра: src - объект приложения HttpApplication и args - аргументы события EventArgs.

Обработчик начала обработки запроса просто запускает таймер. А обработчик завершения обработки запроса получает прошедшее время и добавляет информацию о нем в ответ клиенту через метод Response.Write().

Метод Dispose() оставлен пустым, так как нам не надо освобождать никаких ресурсов, связанных с модулем.

После определения модуля его надо зарегистрировать в файле web.config. Для этого добавим в файл в пределах узла configuration следующую секцию:

<system.webServer>
  <modules>
    <add name="Timer" type="LifeCycleApp.Modules.TimerModule"/>
  </modules>
</system.webServer>

В данном случае у меня приложение называется LifeCycleApp, а модуль TimerModule находится в папке Modules, поэтому полное название типа будет LifeCycleApp.Modules.TimerModule.

И в конце мы можем протестировать модуль:

Модули в ASP.NET MVC

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

Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850