Тази статия е огледална статия за машинен превод, моля, кликнете тук, за да преминете към оригиналната статия.

Изглед: 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, а * означава, че съвпада с всички. тип показва типа на класа Handler, WebApplication2. RayHandler е името на класа, WebApplication2 се отнася до името на асемблера в Bin директорията, например името на асемблера в примера е WebApplication2.dll и няма нужда да се дефинира име на суфикс тук.

Стартирайте сайта, въведете URL адреса, завършващ на ".ray", и ще видите следния резултат:



Преглед на IHttpHandlelerFactory

Понякога може да се наложи да работим с няколко различни суфикса, като един суфикс съответства на клас Handler, и ето как изглежда нашият Web.config файл:


Ако имаме много класове за имплементация на HttpHandler, тогава конфигурацията на Web.config файловете със сигурност ще изглежда многословна. Или в някои случаи, когато можем да определим кой Handler отговаря, когато програмата работи, трябва да използваме IHttpHandlerFactory.

IHttpHandlerFactory се дефинира по следния начин:


Сред тях:

GetHandler(): Връща инстанция, която реализира интерфейса IHttpHandler;
ReleaseHandleler(): Позволява на Factory да използва повторно съществуваща Handler инстанция.
Вземете горните заявки за лъчи и rss като пример, реализирайте класа Factory:

В този случай конфигурацията в Web.config е следната:


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

Scalable IHttpHandlerFactory

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

Отговорът определено е да. Читателите, които са запознати с дизайн модела, трябва да разберат, че това е прост фабричен модел, и за да постигнем предишните функции, можем да използваме режима на проектиране, наречен разширени точки.

И тук можем да използваме и езиковата функция на езика C# – отражение. Чрез механизма за отражение на C# отразяваме съответния тип Ханлдер според суфикса на URL адреса, стига да сме съгласни относно съответствието между името на суфикса на URL адреса и името на класа на Обработващия.

Например, пренаписваме GetHandler() по следния начин:

В този случай трябва само да поставите Handler класа в метода под същото пространство от имена като HandlelerFactory класа и да го конфигурирате правилно в 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