Správičky 2 270 Blogy 577 Fórum 14 074

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 MyNewHandler : Inherits IHttpHandler
    Public
Sub ProcessRequest(context As HttpContext)
        context.Response.Write(
"Ahoj svet ASP.NET!")
    End
Sub

    Public
Function IsReusable() As Boolean
        Return(
True)
    End
Function
End Class
Túto triedu skompilujeme do dll a uložíme do /bin adresáru web aplikácie, ktorá bude nový HTTP Handler využívať.

Ing. Igor Stanek, ASP.NET MVP, MCP

Som spoluzakladateľom a spolumajiteľom spoločnosti CHASTIA s.r.o., Poprad (www.chastia.com). V spoločnosti pôsobím ako konateľ a Software Architect.

Prevádzkujem internetový portál na online prevod jednotiek na internete www.prevody.sk a prvý internetový portál o technológii Microsoft .NET na Slovensku www.vyvojari.sk (bývalé www.AspNet.sk).

Som držiteľom certifikácie Microsoft Certified Professional a zo strany Microsoftu som už 6 rokov za sebou ocenený titulom Microsoft Most Valuable Professional za kompetenciu "ASP.NET/IIS".

Ďalšie info o mne nájdete na mojej osobnej stránke www.spigi.sk.

Článkov: 105, Správičiek: 13, Príspevkov vo fóre: 560, Príspevkov v blogu: 124, Bodov: 15560
Najaktívnejší č.: 3
Profil používateľa

Reakcie

Titulok:


Meno:


Url:
Koľko je 22 + 4? (ochrana proti spamu)

Komentár:


Najaktívnejší užívatelia
1. 35110 b. photo vlko
2. 16735 b. photo T
3. 15560 b. photo spigi
4. 6635 b. photo dudok
5. 5705 b. photo slavof
6. 5205 b. photo siro
7. 4745 b. photo duracellko
8. 3780 b. photo Liero
9. 3690 b. photo lubolacko
10. 3625 b. photo jakub