web-dev-qa-db-de.com

HTTP-Module und HTTP-Handler in ASP.Net MVC?

Im Interview wurde mir die Frage gestellt, wie man HTTP module Und HTTP handler In ASP.Net MVC Implementiert. Ich weiß, dass sie in ASP.Net verwendet werden, um Vorverarbeitungslogik zu schreiben, bevor die Aspx-Seite aufgerufen wird. Aber in ASP.Net MVC haben wir Filter dafür, also habe ich ihnen gesagt, dass wir Filter dafür verwenden. Habe ich die richtige Antwort gegeben?

17
rohit singh

Aktionsfilter Ermöglichen das Einbinden in Nur MVC-spezifische Ereignisse, wohingegen HTTP-Module Ermöglicht das Einbinden in ASP.Net-Ereignisse. Selbst in MVC müssen Sie zur Implementierung eines HTTP-Moduls und eines HTTP-Handlers eine entsprechende Schnittstelle implementieren.

  • Wenn Sie möchten, dass Ihre Funktionalität nur einmal pro HTTP-Anforderung ausgeführt wird, sollten Sie ein HTTP-Modul verwenden.
  • ActionFilters können mehrmals in einem einzelnen Trip zum Server ausgeführt werden.

Zur Erläuterung der HTTP-Module und HTTP-Handler verwendet MVC das HTTP-Modul und den HTTP-Handler, um die Vorverarbeitungslogik in die Anforderungskette einzufügen.

  • HTTP-Handler sind auf Erweiterungen basierende Präprozessoren, während HTTP-Module auf Ereignissen basierende Präprozessoren sind.
    • Zum Beispiel: Wenn Sie die Verarbeitung von jpg -Dateien ändern möchten, implementieren Sie einen benutzerdefinierten HTTP-Handler. Wenn Sie während der Verarbeitung der Anforderung zusätzliche Logik ausführen möchten, müssen Sie dies tun Implementieren Sie ein benutzerdefiniertes HTTP-Modul. Es gibt immer nur einen HTTP-Handler für eine bestimmte Anforderung, es können jedoch mehrere HTTP-Module vorhanden sein.

So implementieren Sie einen HTTP-Handler:

Sie implementieren die Klasse IHttpHandler und implementieren die Methode ProcessRequest und die Eigenschaft IsResuable. Die Eigenschaft IsResuable bestimmt, ob der Handler wiederverwendet werden kann oder nicht.

public class MyJpgHandler: IHttpHandler 
{

    public bool IsReusable => false;

    public void ProcessRequest(HttpContext context) 
    {
       // Do something
    }
}

Als Nächstes müssen wir in der Datei web.config Angeben, welche Art von Anforderung von unserem benutzerdefinierten Handler verarbeitet wird:

<httpHandlers>
    <add verb="*" path="*.jpg" type="MyJpgHandler"/>
</httpHandlers>

So implementieren Sie ein HTTP-Modul:

Wir müssen IHttpModule implementieren und die erforderlichen Ereignisse in der Init -Methode registrieren. Als einfaches Beispiel, wenn wir alle Anfragen protokollieren wollten:

public class MyHttpModule: IHttpModule 
{

    public MyHttpModule() {}

    public void Init(HttpApplication application) 
    {
        application.BeginRequest += new EventHandler(this.context_BeginRequest);
        application.EndRequest += new EventHandler(this.context_EndRequest);
    }

    public void context_BeginRequest(object sender, EventArgs e) 
    {
        StreamWriter sw = new StreamWriter(@ "C:\log.txt", true);
        sw.WriteLine("Request began at " + DateTime.Now.ToString());
        sw.Close();
    }

    public void context_EndRequest(object sender, EventArgs e) 
    {
        StreamWriter sw = new StreamWriter(@ "C:\log.txt", true);
        sw.WriteLine("Request Ended at " + DateTime.Now.ToString());
        sw.Close();
    }

    public void Dispose() {}
}

Und registrieren Sie unser Modul in der Datei web.config:

<httpModules>
    <add name="MyHttpModule " type="MyHttpModule " />
</httpModules>
23
Ujain