So arbeiten Sie mit HTTPHandlern in ASP.Net

Ein HTTP-Handler kann als Endpunkt definiert werden, der als Antwort auf eine Anforderung ausgeführt wird und zur Verarbeitung bestimmter Anforderungen basierend auf Erweiterungen verwendet wird. Die ASP.Net-Laufzeit-Engine wählt den geeigneten Handler aus, um eine eingehende Anforderung basierend auf der Dateierweiterung der Anforderungs-URL zu bedienen. Im Gegenteil, ein HttpModule ist eine Komponente, die Teil der ASP.Net-Anforderungsverarbeitungspipeline ist und bei jeder Anforderung aufgerufen wird, die an Ihre Anwendung gestellt wird. Beachten Sie, dass das Hauptziel von HTTP-Handlern und HttpModules darin besteht, Vorverarbeitungslogik in die Pipeline einzufügen.

Angenommen, Ihre Anwendung muss Bilder unterschiedlicher Größe bereitstellen. Sie können einen benutzerdefinierten HTTP-Handler verwenden, um die Größe dieser Bilder zu ändern und die Antwort zurückzusenden. Ein weiteres Szenario, in dem Sie möglicherweise einen benutzerdefinierten HTTP-Handler verwenden möchten, besteht darin, dass Sie eine Vorverarbeitungslogik in Ihrer Anwendung basierend auf den Erweiterungen ausführen möchten. Obwohl Sie mit HTTPhandler fast alles tun können, was Sie auch mit Ihrer ASP.Net-Seite tun können, sind HTTPhandler viel portabler und wiederverwendbarer als Ihre Webseiten.

Wenn eine Anforderung für eine Ressource an die ASP.Net Engine gesendet wird, instanziiert der ASP.Net Worker-Prozess wiederum den entsprechenden HTTP-Handler, um die Anforderung basierend auf der Erweiterung zu bedienen. Ein HTTPhandler in ASP.Net ist eine Klasse, die die IHTTPhandler-Schnittstelle implementiert. Die IHTTPhandler-Schnittstelle ist übrigens im System.Web-Namespace verfügbar. Beachten Sie, dass die PageHandlerFactory die IHTTPhandlerFactory-Schnittstelle implementiert und eine Methode namens GetHandler enthält, die wiederum dafür verantwortlich ist, den entsprechenden Handler an den Server der jeweiligen Anforderung zurückzugeben.

In der MSDN heißt es: "Ein ASP.Net-HTTP-Handler ist der Prozess (häufig als" Endpunkt "bezeichnet), der als Antwort auf eine Anforderung an eine ASP.Net-Webanwendung ausgeführt wird. Der häufigste Handler ist ein ASP.Net-Seitenhandler Das verarbeitet ASPX-Dateien. Wenn Benutzer eine ASPX-Datei anfordern, wird die Anforderung von der Seite über den Seitenhandler verarbeitet. "

Erstellen eines benutzerdefinierten HTTP-Handlers

In diesem Abschnitt erfahren Sie, wie Sie einen benutzerdefinierten HTTP-Handler in ASP.Net erstellen können. Um einen benutzerdefinierten HTTP-Handler zu erstellen, erstellen Sie eine Klasse, die den IHTTP-Handler implementiert, wie im folgenden Codeausschnitt gezeigt.

namespace CustomHTTPhandler

{

   public class CustomHTTPhandler : IHTTPhandler

   {

       public bool IsReusable

       {

           get { return false; }

       }

       public void ProcessRequest(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }

}

Beachten Sie, dass Ihr benutzerdefinierter HTTP-Handler eine Eigenschaft namens IsReusable und eine Methode namens ProcessRequest haben sollte. Während ersteres verwendet wird, um anzugeben, ob der Handler wiederverwendet werden kann, ist letzteres eine Methode, die die eigentliche Verarbeitung für Sie erledigt. Im Wesentlichen sollte jeder benutzerdefinierte HTTPHandler die IHttphandler-Schnittstelle implementieren und diese beiden Mitglieder definieren.

Registrieren Sie Ihren Handler

Die Zuordnungsinformationen für die HTTP-Handler sind in den Konfigurationsdateien verfügbar. So könnte ein Abschnitt Ihrer Datei machine.config aussehen.

Jetzt müssen Sie der Laufzeit auch mitteilen, wann Ihr benutzerdefinierter HTTP-Handler aufgerufen werden soll. Wo sollten Sie dies angeben? Nun kann solche Details in der Datei web.config angeben. Sie können HTTP-Handler mithilfe des Konfigurationsabschnitts in Ihrer Anwendungskonfigurationsdatei hinzufügen und entfernen. So können Sie Ihren Handler in der Datei web.config der Anwendung registrieren.

  

Also, was haben wir hier gemacht? Wir haben gerade unseren Handler registriert und angegeben, dass eine Anfrage für eine Erweiterung von .idgaspx an den benutzerdefinierten HTTP-Handler mit dem Namen CustomHTTPhandler weitergeleitet werden soll.

Beachten Sie, dass die HTTP-Handler im Gegensatz zu ASPX-Webseiten keine visuellen Elemente haben. Sie können Ihre HTTP-Handler in einer benutzerdefinierten Bibliothek erstellen und sie dann nach Bedarf wiederverwenden.

Asynchrone HTTPHandler

Die neueren Versionen von ASP.Net bieten Unterstützung für asynchrone HTTP-Handler. Sie können async / await und die TPL nutzen, um asynchrone HTTP-Handler in ASP.Net zu erstellen. Um einen benutzerdefinierten asynchronen HTTP-Handler zu erstellen, sollten Sie die HttpTaskAsyncHandler-Klasse erben. Die abstrakte Klasse HttpTaskAsyncHandler implementiert wiederum die Schnittstellen IHttpAsyncHandler und IHTTPhandler. Das folgende Codefragment zeigt, wie unser benutzerdefinierter asynchroner HTTP-Handler auf den ersten Blick aussieht.

   public class CustomHTTPhandler : HttpTaskAsyncHandler

   {

       public override Task ProcessRequestAsync(HttpContext context)

       {

           throw new NotImplementedException();

       }

   }