HTTP Handlers a rozšírenie ASP.NET spigi - 6. 6. 2003 16:33 - 7772 views Ukážeme si, ako vytvoriť nový HTTP Handler na obslúženie požiadavky z nejakej URL. Internet Information Server podporuje nízkoúrovňové API – ISAPI filtre, ktoré dodávajú možnosť programátorom obslúžiť HTTP požadavky – na úrovni IIS. Na to však potrebujeme minimálne znalosť C++. Čo ak nemáme prístup k serveru a aj napriek tomu by sme potrebovali vytvoriť si svoj vlastný handler na spracovanie HTTP požiadavky? ASP.NET nám poskytuje rozhranie System.Web.IHTTPHandler, vďaka ktorému môžeme spracovávať požiadavky na webserver (avšak iba na súbory, ktoré majú v IIS zaregistrovanú príponu na spracovanie aspnet_isapi.dll ISAPI filtrom). Najčastejšie sa tieto handlery používajú pre scenáre, kde sa vracajú binárne dáta. HTTP požiadavka je odoslaná z IIS do ASP.NET. ASP.NET na základe konfiguračného súboru (web.config, machine.config) rozhodne, ktorý HTTP modul požiadavku spracuje. Napríklad pre požiadavky na .aspx je to handler System.Web.UI.PageHandlerFactory. Základné handlery sú „zaregitrované“ v konfiguračnom súbore machine.config. Také základné sú napríklad: Handler pre web stránky (.aspx), pre WebServices (.asmx), User Controls (.ascx), konfiguračné súbory (.config). Zaujímavý je napríklad handler pre iné súbory ako .aspx a .asmx. Tie využívajú väčšinou handler System.Web.HttpForbiddenHandler. Tento handler explicitne zabraňuje prístup k týmto súborom, aby ich nebolo možné „stiahnuť“. Najprv si ukážeme, akým spôsobom môžeme pridať do konfigurácie nový HTTP Handler, potom, akým spôsobom môžeme handler odstrániť pre aktuálnu web aplikáciu a nakoniec si vytvoríme nejaký jednoduchý handler. Pridanie handleru Nový http handler môžeme pridať do aplikácie pomocou konfiguračného súboru web.config. Táto konfiguračná sekcia bude vyzerať približne takto:<configuration> <system.web> <httphandlers> <add type=" Namespace.Class, AssemblyName" path="*.aspx" verb="GET,POST" /> </httphandlers> </system.web></configuration>Atribút verb môže obsahovať hodnoty „GET, POST, *“, tu si nastavíme pre ktoré HTTP požiadavky bude handler použitý. Atribút path nastavuje masku, podľa ktorej sú filtrované požiadavky (názov súboru). Môže byť použitý názov konkretného súboru => handler bude použitý iba pri požiadavke na tento súbor, alebo môžeme používať aj hviezdičky :-)) A nakoniec atribút type predstavuje [Namespace].[Class], [Assembly name]. POZOR !!! – nezabudnite zaregistrovať príponu súboru na IIS... ako ISAPI filter treba použiť aspnet_isapi.dll Odstránenie handleru Pokiaľ potrebujeme z nejakého dôvodu ostrániť HTTP handler v nejakej web aplikácii... a tento handler je zadefinovaný napríklad v machine.config, môžeme použiť toto nastavenie:<configuration> <system.web> <httphandlers> <remove path="*.aspx" verb="GET,POST"></remove> </httphandlers> </system.web></configuration>užívateľovi sa objaví hláška “Súbor nebol nájdený!”. Jednoduchý HTTP Handler Založme si vo Visual Studiu nový projekt Class Library. HTTP Handler môžeme napísať v ľubovolnom .NET programovacom jazyku a nie sme obmedzení iba na C++, ako je to v prípade ISAPI filtrov. Class Library bude obsahovať jednú triedu. Napríklad: Public Class MyNewHandlerClass MyNewHandler : Inherits IHttpHandler Public Sub ProcessRequest()Sub ProcessRequest(context As HttpContext) context.Response.Write("Ahoj svet ASP.NET!") End Sub Public()Sub Public Function IsReusable()Function IsReusable() As Boolean Return(True) End Function End Class()FunctionEnd ClassTúto triedu skompilujeme do dll a uložíme do /bin adresáru web aplikácie, ktorá bude nový HTTP Handler využívať.