Как да работя с HTTPHandlers в ASP.Net

HTTPhandler може да бъде дефиниран като крайна точка, която се изпълнява в отговор на заявка и се използва за обработка на конкретни заявки въз основа на разширения. Механизмът за изпълнение на ASP.Net избира подходящия манипулатор, който да обслужва входяща заявка въз основа на разширението на файла на URL адреса на заявката. Напротив, HttpModule е компонент, който е част от конвейера за обработка на заявки ASP.Net и се извиква при всяка заявка, отправена към вашето приложение. Обърнете внимание, че основната цел както на HTTPhandlers, така и на HttpModules е да инжектира логика за предварителна обработка на конвейера.

Да приемем, че вашето приложение трябва да обслужва изображения с различни размери - можете да се възползвате от персонализиран HTTPhandler, за да преоразмерите тези изображения и да изпратите отговора обратно. Друг сценарий, при който може да искате да използвате персонализиран HTTPhandler, е когато искате да изпълните някаква логика за предварителна обработка във вашето приложение въз основа на разширенията. Въпреки че можете да правите почти всичко, което можете да направите с HTTPhandler, също и със страницата си ASP.Net, HTTPhandlers са много по-преносими и многократно използвани от вашите уеб страници.

Когато заявка за ресурс постъпва в ASP.Net Engine, ASP.Net Worker Process от своя страна създава екземпляр на подходящия HTTPhandler за сървър на заявката въз основа на разширението. HTTPhandler в ASP.Net е клас, който реализира интерфейса IHTTPhandler. Между другото, интерфейсът IHTTPhandler е достъпен в пространството от имена System.Web. Имайте предвид, че PageHandlerFactory реализира интерфейса IHTTPhandlerFactory и съдържа метод, наречен GetHandler, който от своя страна е отговорен за връщането на подходящия манипулатор на сървъра на конкретната заявка.

MSDN гласи: „ATP.Net HTTPhandler е процесът (често наричан„ крайна точка “), който се изпълнява в отговор на заявка, отправена към уеб приложение на ASP.Net. Най-честият манипулатор е манипулатор на страници ASP.Net който обработва .aspx файлове. Когато потребителите поискат .aspx файл, заявката се обработва от страницата чрез манипулатора на страницата. "

Създаване на потребителски HTTPhandler

В този раздел ще разгледаме как можем да изградим персонализиран HTTPhandler в ASP.Net. За да създадете персонализиран HTTPhandler, създайте клас, който реализира IHTTPhandler, както е показано в кодовия фрагмент по-долу.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

Имайте предвид, че вашият персонализиран HTTP манипулатор трябва да има свойство, наречено IsReusable, и метод, наречен ProcessRequest. Докато първият се използва, за да се определи дали манипулаторът може да се използва повторно, вторият е метод, който извършва действителната обработка вместо вас. По същество всеки потребителски HTTPHandler трябва да внедри интерфейса IHttphandler и да дефинира тези два члена.

Регистриране на вашия манипулатор

Информацията за картографиране за HTTP handlers е налична в конфигурационните файлове. Ето как може да изглежда секция от вашия файл machine.config.

Сега също така ще трябва да уведомите по време на изпълнение, кога трябва да бъде извикан вашият персонализиран HTTPhandler. Къде трябва да посочите това? Е, можете да посочите такива подробности във файла web.config. Можете да добавяте и премахвате HTTPhandlers, като използвате раздела за конфигуриране в конфигурационния файл на вашите приложения. Ето как можете да регистрирате вашия манипулатор във файла web.config на приложението.

  

И така, какво направихме тук? Току-що регистрирахме нашия манипулатор и посочихме, че ако пристигне искане за разширение на .idgaspx, такова искане трябва да бъде насочено към персонализирания Http манипулатор, наречен CustomHTTPhandler.

Имайте предвид, че за разлика от .aspx уеб страниците, HTTP обработващите нямат визуални елементи. Можете да създадете своите HTTP ръчни устройства в персонализирана библиотека и след това да ги използвате повторно, когато и когато са необходими.

Асинхронни HTTPHandlers

По-новите версии на ASP.Net предоставят поддръжка за асинхронни Http манипулатори. Можете да се възползвате от async / await и TPL за изграждане на асинхронни HTTP-манипулатори в ASP.Net. За да създадете персонализиран асинхронен HTTPhandler, трябва да наследите класа HttpTaskAsyncHandler. Абстрактният клас HttpTaskAsyncHandler от своя страна реализира интерфейсите IHttpAsyncHandler и IHTTPhandler. Следният кодов фрагмент илюстрира как изглежда нашият асинхронен HTTPhandler на пръв поглед.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }