Tento článek je zrcadlovým článkem o strojovém překladu, klikněte zde pro přechod na původní článek.

Pohled: 20191|Odpověď: 0

[ASP.NET] Asp.Net IHttpHandler představen

[Kopírovat odkaz]
Zveřejněno 13.03.2018 21:40:17 | | | |
Asp.Net IHttpHandler představen
ASP.NET dvě běžně používaná zpracovatelská rozhraní při odpovídání na HTTP požadavky jsou IHttpHandler a IHttpModule.

Obecně se IHttpHandler používá ke zpracování specifického typu požadavku, například k samostatnému zpracování každého souboru *.asp, *.aspx. IHttpModule se obvykle používá k řešení operací, které jsou běžně vyžadovány pro požadavek, například k provádění některých stejných kontrol na stránce požadavku.

Podívejme se na zpracovatelské kroky IIS serveru při zadávání odpovídajícího HTTP požadavku. ASP.NET má koncept pipeline, což znamená, že každý ASP.NET požadavek bude mít v IIS řadu odpovídajících operací, které vytvářejí řádkovou sekvenci.

ASP.NET Úvod do potrubí

Podívejme se na časový diagram zpracování pipeline:




Jak je vidět na obrázku, po příchodu požadavku je implementace zpracována HttpModule a poté je vyvolána metoda ProcessRequest() v HttpHandleru, která vykonává konkrétní odpověď. Proto není těžké pochopit, proč je zpracování požadavků specifických pro třídu umístěno do třídy HttpHandler, přičemž se provádějí některé kontroly, které jsou společné pro všechny požadavky v HttpModule.

Praxe v kódování
IHttpHandler

Autor nedávno narazil na použití IHttpHandleru pro zpracování klientských volání v projektu, takže si stručně pojďme probrat jednoduchý návrh rozhraní založený na IHttpHandleru.

Rozhraní IHttpHandler má pouze dva členy:


Atribut IsReusable identifikuje, zda lze objekt HttpHandler použít i jinými instancemi, a obvykle ho nastavujeme na True. Metoda ProcessRequest() je konkrétní odpověď na požadavek a stačí zde uvést konkrétní operaci obchodní logiky.

Nejprve vytvořte nový webový projekt a přidejte třídu Handler:

Třída RayHandler implementuje funkci ProcessRequest() rozhraní IHttpHandler, která je pouze přímým výstupem textu.

Poté musíme do souboru Web.config přidat následující konfiguraci:


path označuje shodu URL, například *.ray, což znamená, že handler odpoví na URL požadavky končící na ".ray", slovo označuje metodu požadavku, například Get/Post, a * znamená, že se shoduje se všem. typ označuje typ třídy Handler, WebApplication2. RayHandler je název třídy, WebApplication2 odkazuje na název assembleru v adresáři Bin, například název assembleru v příkladu je WebApplication2.dll a zde není potřeba definovat příponu.

Spusťte web, zadejte URL končící na ".ray" a uvidíte následující výsledek:



Přehled IHttpHandlerFactory

Někdy budeme muset pracovat s více různými příponami, přičemž jeden přípona odpovídá třídě Handler, a takto vypadá náš soubor Web.config:


Pokud máme hodně implementačních tříd HttpHandler, pak naše konfigurace souboru Web.config bude působit rozvláčně. Nebo v některých případech, kdy můžeme určit pouze to, který Handler reaguje při běhu programu, musíme použít IHttpHandlerFactory.

IHttpHandlerFactory je definován následovně:


Mezi nimi:

GetHandler(): Vrací instanci, která implementuje rozhraní IHttpHandler;
ReleaseHandler(): Umožňuje Factory znovu použít existující instanci Handleru.
Vezměme si výše uvedené požadavky na paprsek a RSS jako příklad, implementujte třídu Factory:

V tomto případě je konfigurace ve Web.config následující:


V této fázi je implementována funkce použití třídy Factory pro odpovídající různým specifickým handlerům, což zjednodušuje konfiguraci.

Škálovatelný IHttpHandlerFactory

V uvedené implementaci, pokud program bude potřebovat v budoucnu přidat novou metodu zpracování přípon, musí upravit příkaz Switch v GetHandler(), což může také způsobovat chyby nebo přinášet další bezpečnostní rizika. Je tedy možné ponechat třídu HandlerFactory beze změny pro další rozšíření?

Odpověď je rozhodně ano. Čtenáři, kteří znají návrhový vzor, by měli pochopit, že jde o jednoduchý tovární vzor, a k dosažení předchozích funkcí můžeme použít návrhový režim nazývaný pokročilé body.

A zde můžeme také využít jazykovou funkci jazyka C# – reflexi. Prostřednictvím reflexního mechanismu C# odrážíme odpovídající typ Händera podle přípony URL, pokud se shodneme na shodě mezi příponou URL a názvem třídy Handleru.

Například přepíšeme GetHandler() následovně:

V tomto případě stačí umístit třídu Handler do metody pod stejným jmenným prostorem jako třídu HandlerFactory a správně ji nakonfigurovat ve Web.config. Například pokud existuje třída RayHandler, měla by být automaticky přidána následující konfigurace, která automaticky odpovídá:



shrnutí
Tento článek stručně představuje použití IHttpHandleru v ASP.NET, poskytuje implementaci IHttpHandlerFactory při zpracování více požadavků na Handler a nakonec zlepšuje škálovatelnou implementaci více-žádového Handleru pomocí reflexního mechanismu C#.





Předchozí:asp.net Vysvětlující význam HttpContext
Další:asp.net rozhraní IHttpModule je podrobně vysvětleno
Zřeknutí se:
Veškerý software, programovací materiály nebo články publikované organizací Code Farmer Network slouží pouze k učení a výzkumu; Výše uvedený obsah nesmí být používán pro komerční ani nelegální účely, jinak nesou všechny důsledky uživatelé. Informace na tomto webu pocházejí z internetu a spory o autorská práva s tímto webem nesouvisí. Musíte výše uvedený obsah ze svého počítače zcela smazat do 24 hodin od stažení. Pokud se vám program líbí, podporujte prosím originální software, kupte si registraci a získejte lepší skutečné služby. Pokud dojde k jakémukoli porušení, kontaktujte nás prosím e-mailem.

Mail To:help@itsvse.com