IHttpHandler по сравнению с IHttpModule

Попробуйте это -

var fileDownload = require('react-file-download');
var promise = new Promise((resolve, reject) => {
  fileDownload(data, 'filename.csv');
  // wait 2 sec then resolve
  setTimeout(() => { resolve(true) }, 2000);
});

Тогда вы можете сделать -

await promise().then(result => console.log(result)).catch(err => console.log(err.message));
79
задан Dan Esparza 20 April 2009 в 18:05
поделиться

5 ответов

Обработчик HTTP ASP.NET - это процесс (часто называемый «конечной точкой»), который выполняется в ответ на запрос, сделанный к веб-приложению ASP.NET. . Наиболее распространенный обработчик - обработчик страницы ASP.NET, обрабатывающий файлы .aspx. Когда пользователи запрашивают файл .aspx, запрос обрабатывается страницей через обработчик страницы. Вы можете создать свои собственные обработчики HTTP, которые отображают пользовательский вывод в браузере.

Типичные варианты использования настраиваемых обработчиков HTTP включают следующее:

  • RSS-каналы Чтобы создать RSS-канал для веб-сайта, вы можете создать обработчик, который передает XML в формате RSS. Затем вы можете привязать расширение имени файла, например .rss, к настраиваемому обработчику. Когда пользователи отправляют на ваш сайт запрос, который заканчивается на .rss, ASP.NET вызывает ваш обработчик для обработки запроса.
  • Сервер изображений Если вы хотите, чтобы веб-приложение отображало изображения различных размеров, вы можете написать собственный обработчик для изменения размера изображений и затем отправлять их пользователю в качестве ответа обработчика.

HTTP-модуль - это сборка, которая вызывается при каждом запросе вашего приложения. Модули HTTP вызываются как часть конвейера запросов ASP.NET и имеют доступ к событиям жизненного цикла на протяжении всего запроса. Модули HTTP позволяют проверять входящие и исходящие запросы и предпринимать действия на основе запроса.

Типичные варианты использования модулей HTTP включают следующее:

  • Безопасность Поскольку вы можете проверять входящие запросы, модуль HTTP может выполнять настраиваемую аутентификацию или другую безопасность выполняет проверку перед вызовом запрошенной страницы, веб-службы XML или обработчика. В информационных службах Интернета (IIS) 7. 0 в интегрированном режиме, вы можете расширить аутентификацию с помощью форм для всех типов контента в приложении.
  • Статистика и ведение журнала Поскольку модули HTTP вызываются при каждом запросе, вы можете собирать статистику запросов и регистрировать информацию в централизованном модуле, а не в отдельные страницы.
  • Пользовательские верхние или нижние колонтитулы Поскольку вы можете изменять исходящий ответ, вы можете вставлять содержимое, такое как информация настраиваемого заголовка, в каждую страницу или ответ веб-службы XML.

From: http: // msdn. microsoft.com/en-us/library/bb398986.aspx[1293 impression

69
ответ дан 24 November 2019 в 10:18
поделиться

Как указано здесь , HttpModules - это простые классы, которые могут подключаться к конвейеру обработки запросов, тогда как HttpHandlers отличаются от HttpModules не только из-за их позиций в конвейере обработки запросов, но и потому, что они должны быть сопоставлены с определенными расширениями файлов.

16
ответ дан 24 November 2019 в 10:18
поделиться

IHttpModule дает вам гораздо больше контроля, вы можете в основном контролировать весь трафика, направленного на ваше веб-приложение. IHttpHandler дает вам меньше контроля (трафик фильтруется до того, как он достигает вашего обработчика), но если этого достаточно для ваших нужд, тогда я не вижу смысла использовать IHttpModule .

В любом случае, лучше всего иметь свою собственную логику в отдельном классе, а затем просто использовать этот класс из IHttpModule или IHttpHandler . Таким образом, вам не нужно беспокоиться о выборе одного или другого. Фактически, вы можете создать дополнительный класс, который реализует [114] 232 и IHttpHandler и IHttpModule , а затем решить, что использовать, установив его в Web.config .

15
ответ дан 24 November 2019 в 10:18
поделиться

Модули предназначены для обработки событий, вызванных приложением, до и после того, как запрос фактически обработан обработчиком. С другой стороны, обработчикам не предоставляется возможность подписаться на какие-либо события приложения, а вместо этого просто вызывается их метод ProcessRequest для «основной» работы по обработке конкретного запроса.

Посмотрите на эта документация от Microsoft (примерно на полпути вниз по странице в разделе «Запрос обрабатывается конвейером HttpApplication»):

http://msdn.microsoft.com/en-us/library/bb470252.aspx

На шаге 15 вы можете увидеть, где обработчик получает возможность выполнить. Все события до и после этого шага доступны для перехвата модулями, но не обработчиками.

В зависимости от того, каких конкретных функций вы пытаетесь достичь, вы можете использовать либо обработчик, либо модуль для реализации обработчика выгрузки. Вы могли бы даже использовать оба.

Что-то, что можно рассмотреть, может использовать обработчик загрузки, который уже написан.

Вот бесплатный и открытый исходный код:

http://www.brettle.com/neatupload

Вот коммерческий:

http://krystalware.com/Products/SlickUpload/

Если вы посмотрите документацию для NeatUpload, вы увидите, что для этого требуется настроить модуль.

5
ответ дан 24 November 2019 в 10:18
поделиться

15 секунд - это красивый небольшой учебник с практическим примером

5
ответ дан 24 November 2019 в 10:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: