Подтвердить что ты не робот

HTTP-модуль против фильтра действий в asp.net-mvc

Я разрабатываю приложение в asp.net MVC3, и у меня есть следующие вопросы: Когда следует писать HTTP-модуль и когда следует писать фильтр действий?

4b9b3361

Ответ 1

  • Фильтр - это более MVC-подход к работе, тогда как Http-модуль - это более простой способ ASP.NET. Оба служат схожим назначением, обеспечивая крючок в технологической линии.

  • HttpModule более общий и когда вы хотите, чтобы какая-то вещь обрабатывалась по каждому запросу. Фильтры полезны для добавления определенного действия.

  • Если вы хотите, чтобы какая-то вещь выполнялась только один раз за запрос Http, вы должны использовать HttpModule. ActionFilter может выполняться несколько раз во время запроса до тех пор, пока вы не проверите IsChildActionOn.

Ответ 2

HttpModule вызывается до и после выполнения обработчика запросов. Они предназначены для того, чтобы разработчик мог перехватывать, участвовать или изменять каждый запрос. Существует 22 доступных события, на которые можно подписаться, что позволяет модулю работать с запросом на разных этапах процесса. События полезны для разработчиков страниц, которые хотят запускать код, когда возникают события конвейерного запроса. Они также полезны, если вы разрабатываете настраиваемый модуль и хотите, чтобы модуль вызывался для всех запросов к конвейеру.

Фильтры предназначены для ввода логики между жизненным циклом запроса MVC. В частности, до и после того, как действие вызывается, а также до и после обработки результата. Фильтры предоставляют пользователям мощные способы проверки, анализа, захвата и использования нескольких вещей, проходящих в рамках проектов MVC. С MVC5 существует 5 типов фильтров:

  • Аутентификация
  • Разрешение
  • Действие
  • Результат
  • Exception

Итак, если вы хотите перехватить, принять участие или изменить в конкретном 22 событиях в конвейере http-запроса, выберите модули. Если ваша логика строго связана с методом действия, вы лучше перенаправляете сервер на один из следующих методов ActionFilterAttribute:

  • OnActionExecuting
  • OnActionExecutted
  • OnResultExecuting
  • OnResultExecuted

Ответ 3

HttpModule - это то, как IIS позволяет веб-приложению переопределять поведение по умолчанию или добавлять пользовательскую логику, позволяя присоединить обработчики событий к событиям HttpApplication. Различные режимы IIS (Integrated или Classic) даже используют разные настройки Web.config.
Ссылки:
http://msdn.microsoft.com/en-us/library/ms227673(v=vs.100).aspx

Пример: перенаправление не-www на www URL

public void Init(HttpApplication application)
{
    application.PreRequestHandlerExecute += this.Application_PreRequestHandlerExecute;
}

private void Application_PreRequestHandlerExecute(object sender, EventArgs e)
{
    Uri requestUrl = HttpContext.Current.Request.Url;
    string host = requestUrl.Authority.ToLower();
    if (!host.StartsWith("www"))
    {
        HttpContext.Current.Response.Redirect(requestUrl.Scheme + "://www." + host + requestUrl.PathAndQuery);
        HttpContext.Current.Response.End();
    }
}

Фильтр действий - это атрибут, декорирующий контроллеры или методы действий. Это слой абстракции между маршрутами MVC и действиями. С фильтрами действий мы можем применять одну и ту же логику к нескольким контроллерам или методам действий. например, пользовательское ведение журнала.