HTTP işleyicisi ve HTTP modülü


144

Birisi her ikisi arasındaki farkı 2'den az cümlede açıklayabilir mi? Evet, Google'ın yüzlerce cevap verebileceğini biliyorum, ancak 2 açık cümlede bir değil :)


Her istekden önce bir kod çalıştırmak isteme bağlamında.
frenchie

23
+1 "Evet, Google’da yapabileceğimi biliyorum".
Csharp

7
"İki cümleden az." Bir cümle gibi mi?
Andrew Theken

Yanıtlar:


316

HttpHandler, istek treninin yönlendirildiği yerdir. HttpModule yol boyunca bir istasyon.


Harika açıklama! :)
SO Kullanıcı

3
Bunun iyi bir cevap olduğunu kabul ediyorum, ancak kabul edilen cevap olarak işaretlenemez.
Shrivallabh

Sadece parlak !! :)
Dee

4
Teknik olarak, "ikiden az cümle" değil. <trollface>
Andrew Theken

5
Güzel. Ben HttpContext tren olduğunu eklemek istiyorum. Her istasyon (Modül) geçerken HttpContext'e bir şekilde katkıda bulunur.
Duanne

203

İki cümle:

Bir HttpModule, uzantısına bakılmaksızın uygulamanıza yapılan her istek için yürütülür ve genellikle güvenlik, istatistik, günlük kaydı vb. Şeyler için kullanılır.

Bir HttpHandler genellikle belirli bir uzantıyla ilişkilendirilir ve RSS akışları, dinamik görüntü oluşturma veya değiştirme ve benzeri şeyler için kullanılır.

Bu tamamen açık değilse biraz daha açıklama:

Onları düşünme şeklim - modüller istek kanalına "eklenir", işleyiciler ise belirli bir dosya uzantısını "işler". Bu nedenle, bir LoggingModule ve PdfHandler içeren bir siteniz varsa, her ikisi de http://example.com/sample.pdf isteği için yürütülür ve yalnızca günlük modülü http: // isteği için yürütülür example.com/sayfa.aspx .

MSDN'deki fark hakkında oldukça net bir makale var: HTTP İşleyicileri ve HTTP Modüllerine Genel Bakış


1
Tamam, bu yüzden bir .aspx dosyasına her istek üzerinde çalışan bazı kod çalıştırmak istiyorsanız bir işleyici uygulamak ve istenen dosya türü ne olursa olsun her istek üzerinde bazı kod çalıştırmak istiyorsanız bir modül uygulamak. Öyle mi?
frenchie

5
@frenchie - Hayır, Sayfa Yaşam Döngüsü sağlayarak HttpHandlers üzerine aspx sayfaları oluşturulur. Bunu bir aspx sayfası olarak düşünün, çok temel bir olayı kesin. ProcessRequest. Diğer taraftan modül, bağladığınız yaşam döngüsünün herhangi bir noktasında yürütülür. Aspx sayfasından önce bir şey çalıştırmak istemeniz için bir modül istiyorsunuz. Ancak .aspx olmadığını sayfalara istekleri dışında elle filtreye ihtiyaç
Phill

6
Her isteğin sadece 1 işleyici ve birden fazla modül içerebileceğini söyleyerek doğru muyum?
Maarten Kieft

1
İşleyicilerin genel cevabı = devlet mi ve modüller yazılı olmayan bir standart değil mi veya ikisinden temelde farklı bir şey var mı, yani, bir kişi bir modülü bir işleyici ve tersi gibi kodlayabilir mi veya imkansız kılanlar?
Rich Bianco

21

HttpHandler ve HttpModule'un ana ve ortak amacı, ASP.NET isteği IIS Sunucusuna ulaşmadan önce ön işleme mantığını enjekte etmektir.

ASP.NET, istek satırına mantık enjekte etmenin iki yolunu sağlar;

  1. Http Handlers: Http Handler, istenen dosya adının uzantısına dayalı olarak ön işleme mantığını enjekte etmemize yardımcı olur. ASP.NET kendi işlevlerinin çoğunu uygulamak için HTTP işleyicilerini kullanır.Örneğin, ASP.NET .aspx, .asmx ve trace.axd dosyalarını işlemek için işleyicileri kullanır.

örnek: RSS özet akışları: Bir Web sitesi için RSS özet akışı oluşturmak için, RSS biçimli XML yayan bir işleyici oluşturabilirsiniz. Kullanıcılar sitenize .rss ile biten bir istek gönderdiğinde, ASP.NET isteği işlemek için işleyicinizi çağırır.

İşleyici 1'i oluşturmanın üç adımı vardır: IHttpHandler arabirimini uygulayın. 2. İşleyiciyi web.config veya machine.config dosyasına kaydedin. 3. (* .arshad) dosya uzantısını IIS'deki aspnet_isapi.dll ile eşleyin.

IHttpHandler arabiriminin uygulanması gereken ProcessRequest yöntemi ve IsReusable özelliği vardır. ProcessRequest: Bu yöntemde, işleyici için çıktı üreten kodu yazarsınız. IsResuable: Bu özellik, bu işleyicinin yeniden kullanılıp kullanılamayacağını belirtir.

İşleyiciyi web.config dosyasına böyle kaydedebilirsiniz

<httpHandlers>
   <add verb="*" path="*.arshad" type="namespace.classname, assemblyname" />
</httpHandlers>

Not: burada arshad uzantılı herhangi bir dosya adını kullanıyoruz.

  1. Http Modülleri: HttpModule, istek IIS Sunucusuna ulaşmadan önce ön işleme mantığını enjekte etmek için olay tabanlı bir işlemcidir. ASP.NET, kimlik doğrulama ve yetkilendirme, oturum yönetimi ve çıktı önbellekleme gibi birçok işlevselliğini uygulamak için HTTP Modülünü kullanır.

ASP.NET altyapısı, istek kanal hattından istek geçtikçe birçok olay yayar. Bu olaylardan bazıları AuthenticateRequest, AuthorizeRequest, BeginRequest, EndRequest. HttpModule kullanarak bu olaylara mantık yazabilirsiniz. Bu mantık, olaylar tetiklendikçe ve istek IIS'ye ulaşmadan önce yürütülür.

Modül oluşturmada iki adım vardır: 1. IHttpModule arabirimini uygulama 2. Modülü web.config veya machine.config dosyasına kaydedin

örnek: Güvenlik: HTTP modülünü kullanarak, istek IIS'ye ulaşmadan önce özel kimlik doğrulaması veya diğer güvenlik denetimlerini gerçekleştirebilirsiniz.


19

HTTP işleyicisi, ASP.NET Web uygulamasına yapılan bir isteğe yanıt olarak çalışan işlemdir. HTTP modülleri, gelen ve giden istekleri incelemenize ve isteğe bağlı olarak işlem yapmanıza olanak tanır.


1
Bu anlamda bir aspx bir tür httphandler olarak düşünülebilir mi?
frenchie

17
Evet Frenchie .. Herhangi bir aspx'in arkasındaki kodu açın. göreceksiniz: public kısmi sınıf good: System.Web.UI.Page Şimdi
Sayfa'ya

5

HttpModule, uygulama yaşam döngüsü olaylarına yanıt verirken HttpHandler http isteğini uzantı ile işlemekten sorumludur.


2

Güzel makale aboute it -and-HttpHandlers

Başvuru: BİLGİ: ASP.NET HTTP Modülleri ve HTTP İşleyicilerine Genel Bakış

“Modüller, işleyici yürütülmeden önce ve sonra çağrılır. Modüller, geliştiricilerin her bir isteğe müdahale etmesini, katılmasını veya değiştirmesini sağlar. İşleyiciler ayrı uç nokta isteklerini işlemek için kullanılır. İşleyiciler ASP.NET Framework'ün tek tek HTTP URL'lerini veya bir uygulama içindeki URL uzantı gruplarını işlemesini sağlar. Modüllerden farklı olarak, bir isteği işlemek için yalnızca bir işleyici kullanılır ”.


Teşekkür ederim, bana çok yardımcı oluyor
Rahul Chowdhury

1

HTTP işleyicisi, ayarlamaya bağlı olarak gerçekte derlemenin yapıldığı yerdir. sayfa uzantısı .aspx ise, system.web.Ui.Pagahandlefactory ile derlenir. derleme HTTP tanıtıcısında yapıldıktan sonra HTTP modülü ve IIS üzerinden gidecek.


0

HTTP İşleyici

HTTP İşleyicisi, bir HTTP isteğine yanıt olarak çalışan işlemdir. Kullanıcı her dosya istediğinde, uzantıya göre işleyici tarafından işlenir. Bu nedenle, dosya adı uzantısına göre özel işlem yapmanız gerektiğinde özel http işleyicileri oluşturulur. Bir site için RSS oluşturma örneğini ele alalım. Bu nedenle, RSS formatlı XML üreten bir işleyici oluşturun. Şimdi .rss uzantısını özel işleyiciye bağlayın.

HTTP Modülleri

HTTP Modülleri bir isteğin yaşam döngüsüne eklenir. Bu nedenle, bir talep işlendiğinde, talebin ardışık düzenindeki tüm modüller içinden geçirilir. Bu nedenle genellikle http modülleri aşağıdakiler için kullanılır:

Güvenlik: İstek yerine getirilmeden önce bir isteğin kimliğini doğrulamak içindir.

İstatistikler ve Günlüğe Kaydetme: Modüller her istek için çağrıldığından, istatistik toplamak ve bilgi kaydetmek için kullanılabilirler.

Özel üstbilgi: Yanıt değiştirilebildiğinden, yanıt için özel üstbilgi bilgileri eklenebilir.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.