Эта статья является зеркальной статьёй машинного перевода, пожалуйста, нажмите здесь, чтобы перейти к оригиналу.

Вид: 20191|Ответ: 0

[ASP.NET] Asp.Net IHttpHandler представлен

[Скопировать ссылку]
Опубликовано 13.03.2018 21:40:17 | | | |
Asp.Net IHttpHandler представлен
ASP.NET двух часто используемых интерфейсов обработки при реагировании на http-запросы являются IHttpHandler и IHttpModule.

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

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

ASP.NET введение в конвейер

Давайте посмотрим на схему тайминга обработки в конвейере:




Как видно на рисунке, после прибытия запроса реализация обрабатывается HttpModule, и затем вызывается метод ProcessRequest() HttpHandler для получения конкретного ответа. Поэтому несложно понять, почему обработка классоспецифических запросов размещена в классе HttpHandler при выполнении некоторых проверок, общих для всех запросов в HttpModule.

Практика кода
IHttpHandler

Автор недавно столкнулся с использованием IHttpHandler для обработки вызовов клиентского интерфейса в проекте, поэтому давайте кратко обсудим простой дизайн интерфейса на основе IHttpHandler.

Интерфейс IHttpHandler состоит только из двух участников:


Атрибут IsReusable определяет, могут ли объект HttpHandler использоваться другими экземплярами, и обычно мы устанавливаем его в True. Метод ProcessRequest() — это конкретный ответ на запрос, и нам нужно указать здесь только конкретную операцию бизнес-логики.

Сначала создайте новый веб-проект и добавьте класс Handler:

Класс RayHandler реализует функцию ProcessRequest() интерфейса IHttpHandler, которая является прямым выходом текста.

Затем нужно добавить следующую конфигурацию в файл Web.config:


path указывает на совпадение URL, например *.ray, что означает, что обработчик отвечает на запросы URL, заканчивающиеся на «.ray», глагол указывает на метод запроса, например Get/Post, а * означает, что он совпадает со всеми. тип указывает на тип класса обработчика, WebApplication2. RayHandler — это имя класса, WebApplication2 — название ассемблера в каталоге Bin, например, имя ассемблера в примере — WebApplication2.dll, и здесь нет необходимости определять суффиксное имя.

Запустите сайт, введите URL, заканчивающийся на «.ray», и вы увидите следующий результат:



Обзор IHttpHandlerFactory

Иногда нам приходится работать с несколькими суффиксами, один из которых соответствует классу обработчика, и вот как выглядит наш файл Web.config:


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

IHttpHandlerFactory определяется следующим образом:


Среди них:

GetHandler(): Возвращает экземпляр, реализующий интерфейс IHttpHandler;
ReleaseHandler(): Позволяет Factory повторно использовать существующий экземпляр обработчика.
Возьмём вышеуказанные запросы на луч и rss в качестве примера, реализуйте класс Factory:

В этом случае конфигурация в Web.config выглядит следующим образом:


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

Масштабируемый IHttpHandlerFactory

В приведённой выше реализации, если программе в будущем потребуется добавить новый метод обработки суффиксов, ей необходимо изменить оператор Switch в GetHandler(), что также может вызвать ошибки или другие риски безопасности. Итак, возможно ли оставить класс HandlerFactory без изменений для последующих расширений?

Ответ определённо да. Читатели, знакомые с шаблоном проектирования, должны понимать, что это простая фабричная схема, и для реализации предыдущих функций можно использовать режим проектирования, называемый расширенными точками.

Здесь мы также можем использовать языковую функцию языка C# — рефлексию. С помощью механизма отражения C# мы отражаем соответствующий тип Ханлдера согласно суффиксу URL, при условии, что мы согласуем соответствие между именем суффикса URL и названием класса обработчика.

Например, мы переписываем GetHandler() следующим образом:

В этом случае достаточно поместить класс Handler в метод под тем же пространством имён, что и класс HandlerFactory, и правильно настроить его в Web.config. Например, если существует класс RayHandler, то следует добавить следующую конфигурацию для автоматического соответствия:



сводка
В этой статье кратко представлено использование IHttpHandler в ASP.NET году, представлена реализация IHttpHandlerFactory для обработки нескольких запросов обработчиков и, наконец, улучшается масштабируемая многозапросная реализация обработчика с использованием механизма отражения C#.





Предыдущий:asp.net Объяснительное значение HttpContext
Следующий:asp.net интерфейс IHttpModule подробно объясняется
Отказ:
Всё программное обеспечение, программные материалы или статьи, публикуемые Code Farmer Network, предназначены исключительно для учебных и исследовательских целей; Вышеуказанный контент не должен использоваться в коммерческих или незаконных целях, иначе пользователи несут все последствия. Информация на этом сайте взята из Интернета, и споры по авторским правам не имеют отношения к этому сайту. Вы должны полностью удалить вышеуказанный контент с компьютера в течение 24 часов после загрузки. Если вам нравится программа, пожалуйста, поддержите подлинное программное обеспечение, купите регистрацию и получите лучшие подлинные услуги. Если есть нарушение, пожалуйста, свяжитесь с нами по электронной почте.

Mail To:help@itsvse.com