Dar de ce folosiți un fișier suplimentar pentru a obține o imagine, dacă în ASP.NET există un instrument minunat de procesare a interogărilor ca HttpHandler. )
Ce este HttpHandler și cum arată? De fapt, HttpHandler este același filtru ISAPI care procesează cererile http. Orice cerere venită la aplicația web ASP.NET va fi în cele din urmă procesată de unul dintre HttpHandlers, iar acest lucru nu poate fi evitat. Unele Http Handlers trec executarea interogării la alte clase (de exemplu, clasa paginii fiind apelată), în timp ce altele procesează cererea și returnează rezultatul clientului. Dar acest lucru nu este important în acest caz. Este important, Microsoft a oferit o oportunitate pentru dezvoltatori de a scrie cu ușurință propriile Http Handlers.
Să continuăm să analizăm sarcina de a obține o imagine din baza de date. Să presupunem că există o tabelă Imagine cu următoarea structură din baza de date:
Vrem să primim din această bază de date o imagine prin identificatorul său unic (valoarea câmpului ID). Cu aceasta, nu vrem să creăm fișiere suplimentare. Și, așa cum am menționat deja, acest lucru nu este necesar - totul se poate face cu ajutorul lui HttpHandler.
Pentru ca o clasă să fie înregistrată ca HttpHandler, este necesară numai implementarea interfeței System.Web.IHttpHandler, care are o proprietate get și o metodă. Să încercăm să facem asta :)
Să începem cu numele clasei:
Apoi punem în aplicare proprietatea IsReusable, indicând dacă clasa noastră poate fi apelată fără reinițializare
Și, în cele din urmă, să trecem la cele mai interesante - implementarea metodei ProcessRequest, care efectuează procesarea reală a cererii. Aș dori să vă reamintesc că dorim să readucem imaginea în sine folosind identificatorul unic al imaginii:
Obținem referințe la obiectele Cerere și Răspuns din solicitare.
Obțineți valoarea identificatorului unic al imaginii
Creați o conexiune la baza de date și obțineți imaginea prin identificatorul său unic
Nu am verificat existența înregistrării aici, dar în viața reală cu siguranță nu-i face rău :)
Setați tipul de conținut corect
Și scriem conținutul imaginii către client.
Asta e tot - HttpHandler-ul nostru este creat. Rămâne să o conectați la aplicația web și va fi gata să lucreze.
Pentru a conecta HttpHandlers, utilizați secțiunea
Folosind acest lucru, conectăm HttpHandler pe care l-am creat aplicației web. Recompilam ansamblul compilat în subdirectorul bin al aplicației web și îl adăugăm în fișierul de configurare din
În limba umană, această linie poate fi explicată după cum urmează: atunci când solicitați fișierul photo.aspx, procesați această solicitare cu HttpHandler PictureHandler.Picture Handler situat în ansamblul PictureHandler. Fiți atenți - fișierul photo.aspx nu există cu adevărat în aplicația web, dar dacă încercați să solicitați fișierul photo.aspx cu identificatorul de imagine unic corect, veți reveni la această imagine.
Asta e tot. Acum, oriunde în aplicația web pentru a scoate o imagine cu id = 10 puteți utiliza
.PS. Nu încercați să utilizați exemplul de mai sus pentru a obține imagini din tabelul Angajați din baza de date Northwind - tot nu funcționează :) În acest tabel nu sunt stocate imagini, ci obiecte OLE.