Ця стаття є дзеркальною статтею машинного перекладу, будь ласка, натисніть тут, щоб перейти до оригінальної статті.

Вид: 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 обов'язково буде багатослівною. Або в деяких випадках, коли ми можемо визначити, який Handler реагує лише під час роботи програми, потрібно використовувати IHttpHandlerFactory.

IHttpHandlerFactory визначається так:


Серед них:

GetHandler(): Повертає екземпляр, що реалізує інтерфейс IHttpHandler;
ReleaseHandler(): Дозволяє Factory повторно використовувати існуючий екземпляр Handler.
Візьмемо наведені вище запити на промень і rss як приклад, реалізуйте клас Factory:

У цьому випадку конфігурація в Web.config виглядає так:


Наразі реалізовано функцію використання класу Factory для відповідності різним конкретним обробникам, що спрощує конфігурацію.

Масштабований IHttpHandlerFactory

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

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

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

Наприклад, ми переписуємо GetHandler() так:

У такому випадку потрібно лише розмістити клас Handler у методі під тим самим простором назв, що й клас HandlerFactory, і правильно налаштувати його у Web.config. Наприклад, якщо існує клас RayHandler, то слід додати таку конфігурацію для автоматичного співпадіння:



зведення
У цій статті коротко представлено використання IHttpHandler у ASP.NET році, реалізовано IHttpHandlerFactory для обробки кількох запитів Handler і, нарешті, покращується масштабована реалізація багатозапитного Handler за допомогою механізму відображення C#.





Попередній:asp.net Пояснювальне значення HttpContext
Наступний:asp.net інтерфейс IHttpModule детально пояснюється
Застереження:
Усе програмне забезпечення, програмні матеріали або статті, опубліковані Code Farmer Network, призначені лише для навчання та досліджень; Вищезазначений контент не повинен використовуватися в комерційних чи незаконних цілях, інакше користувачі несуть усі наслідки. Інформація на цьому сайті надходить з Інтернету, і спори щодо авторських прав не мають до цього сайту. Ви повинні повністю видалити вищезазначений контент зі свого комп'ютера протягом 24 годин після завантаження. Якщо вам подобається програма, будь ласка, підтримуйте справжнє програмне забезпечення, купуйте реєстрацію та отримайте кращі справжні послуги. Якщо є будь-яке порушення, будь ласка, зв'яжіться з нами електронною поштою.

Mail To:help@itsvse.com