Bu makale makine çevirisi ayna makalesidir, orijinal makaleye geçmek için lütfen buraya tıklayın.

Görünüm: 20191|Yanıt: 0

[ASP.NET] Asp.Net IHttpHandler tanıtıldı

[Bağlantıyı kopyala]
Yayınlandı 13.03.2018 21:40:17 | | | |
Asp.Net IHttpHandler tanıtıldı
ASP.NET Http taleplerine yanıt verirken yaygın kullanılan iki işlem arayüzü IHttpHandler ve IHttpModule'dur.

Genel olarak, IHttpHandler belirli bir istek türünü yönetmek için kullanılır; örneğin her *.asp, *.aspx dosyasının ayrı işlenmesi. IHttpModule genellikle istek için yaygın olarak gereken işlemleri yönetmek için kullanılır; örneğin istek sayfasında aynı kontrollerin bazılarını gerçekleştirmek gibi.

IIS sunucusunun ilgili HTTP isteği yaparken işlem adımlarına bakalım. ASP.NET pipeline kavramına sahiptir; bu da her ASP.NET talebinin IIS'de satır benzeri bir dizi işlem oluşturacağı anlamına gelir.

ASP.NET boru hattı girişi

Pipeline'ın işleme zamanlama diyagramına bir göz atalım:




Şekilden görülebileceği gibi, istek geldikten sonra uygulama HttpModule tarafından işlenir ve ardından HttpHandler'ın ProcessRequest() yöntemi çağrılıp, özel yanıt yapılır. Bu nedenle, sınıfa özgü isteklerin işlemesinin neden HttpHandler sınıfında yer aldığını, HttpModül'deki tüm istekler için ortak olan bazı kontroller yapılmasını anlamak zor değildir.

Kod uygulaması
IHttpHandler

Yazar yakın zamanda projede istemci arayüzü çağrılarını yönetmek için IHttpHandler kullanımıyla karşılaştı, bu yüzden IHttpHandler temelli basit arayüz tasarımını kısaca tartışalım.

IHttpHandler arayüzü yalnızca iki üyeye sahiptir:


IsReusable özniteliği, HttpHandler nesnesinin diğer örnekler tarafından kullanılıp kullanılamayacağını belirler ve genellikle bunu True olarak ayarlarız. ProcessRequest() yöntemi, talebe özel bir yanıttır ve burada sadece belirli iş mantığı işlemini koymamız yeterlidir.

Öncelikle, yeni bir web projesi oluşturun ve bir Handler sınıfı ekleyin:

RayHandler sınıfı, IHttpHandler arayüzünün ProcessRequest() fonksiyonunu uygular; bu fonksiyon sadece bir metin parçasının doğrudan çıktısıdır.

Sonra Web.config dosyasına aşağıdaki yapılandırmayı eklememiz gerekiyor:


path URL eşleşmesini gösterir, örneğin *.ray, bu da Handler'ın ".ray" ile biten URL taleplerine yanıt vereceğini, fiil istek yöntemini (örneğin Get/Post) ve * hepsini eşleştirdiği anlamına gelir. type Handler sınıfının türünü gösterir, WebApplication2.RayHandler sınıf adıdır, WebApplication2 ise Bin dizinindeki assembly adını ifade eder; örneğin, örneğin örnekteki assembly adı WebApplication2.dll ve burada ek adı tanımlamanıza gerek yoktur.

Siteyi başlatın, ".ray" ile biten URL'yi girin ve aşağıdaki sonucu görebilirsiniz:



IHttpHandlerFactory Genel Bakış

Bazen birden fazla farklı ek ile uğraşmak zorunda kalabiliriz, bunlardan biri Handler sınıfına karşılık gelir ve Web.config dosyamız şöyle görünüyor:


Eğer çok fazla HttpHandler uygulama sınıfımız varsa, Web.config dosya yapılandırmamız çok uzun görünecektir. Ya da bazı durumlarda, program çalışırken sadece hangi Handler'ın yanıt verdiğini belirleyebildiğimizde, IHttpHandlerFactory kullanmamız gerekir.

IHttpHandlerFactory şu şekilde tanımlanır:


Bunlar arasında:

GetHandler(): IHttpHandler arayüzünü uygulayan bir örnek döndürür;
ReleaseHandler(): Factory'nin mevcut bir Handler örneğini yeniden kullanmasını sağlar.
Yukarıdaki ray ve rss isteklerini örnek olarak alalım, Factory sınıfını uygulayın:

Bu durumda, Web.config'deki yapılandırma şu şekildedir:


Bu aşamada, Fabrika sınıfının farklı özel işleyicilere karşılık gelmesi işlevi uygulanır ve yapılandırma basitleştirilir.

Ölçeklenebilir IHttpHandlerFactory

Yukarıdaki uygulamada, program gelecekte yeni bir ek işleme yöntemi eklemesi gerekirse, GetHandler(), içindeki Switch ifadesini değiştirmesi gerekir; bu da hatalara yol açabilir veya diğer güvenlik riskleri getirebilir. Peki, sonraki uzantılar için HandlerFactory sınıfını değiştirmeden tutmak mümkün mü?

Cevap kesinlikle evet. Tasarım desenine aşina olan okuyucular, bunun basit bir fabrika deseni olduğunu ve önceki işlevleri gerçekleştirmek için gelişmiş noktalar adı verilen tasarım modunu kullanabileceğimizi anlamalıdır.

Ve burada, C# dilinin dil özelliğini - yansıtmayı da kullanabiliriz. C#'ın yansıma mekanizması sayesinde, URL'nin eki ile Handler'ın sınıf adı arasındaki eşleşme konusunda hemfikir olduğumuz sürece, URL'nin ekine göre karşılık gelen Hanlder tipini yansıtırız.

Örneğin, GetHandler()'yi şu şekilde yeniden yazıyoruz:

Bu durumda, Handler sınıfını HandlerFactory sınıfıyla aynı ad alanı altında metoda koyup Web.config'de doğru şekilde yapılandırmanız yeterlidir. Örneğin, bir RayHandler sınıfı varsa, otomatik olarak eşleşmek için aşağıdaki yapılandırma eklenmelidir:



özet
Bu makale, ASP.NET'de IHttpHandler'ın kullanımını kısaca tanıtır, birden fazla Handler isteğinin işlenmesinde IHttpHandlerFactory uygulamasını sağlar ve son olarak, C# yansıtma mekanizmasını kullanarak ölçeklenebilir çoklu istekli Handler uygulamasını geliştirir.





Önceki:asp.net HttpContext'in açıklayıcı anlamı
Önümüzdeki:asp.net IHttpModule arayüzü ayrıntılı olarak açıklanmıştır
Feragatname:
Code Farmer Network tarafından yayımlanan tüm yazılım, programlama materyalleri veya makaleler yalnızca öğrenme ve araştırma amaçları içindir; Yukarıdaki içerik ticari veya yasa dışı amaçlarla kullanılamaz, aksi takdirde kullanıcılar tüm sonuçları ödemelidir. Bu sitedeki bilgiler internetten alınmakta olup, telif hakkı anlaşmazlıklarının bu siteyle hiçbir ilgisi yoktur. Yukarıdaki içeriği indirmeden sonraki 24 saat içinde bilgisayarınızdan tamamen silmelisiniz. Programı beğendiyseniz, lütfen orijinal yazılımı destekleyin, kayıt satın alın ve daha iyi orijinal hizmetler alın. Herhangi bir ihlal olursa, lütfen bizimle e-posta yoluyla iletişime geçin.

Mail To:help@itsvse.com