On m'a posé une question en entrevue sur la façon de mettre en œuvre HTTP module
et HTTP handler
dans ASP.Net MVC
. Je sais qu'ils sont utilisés dans ASP.Net pour écrire la logique de prétraitement avant l'appel de la page aspx. Mais dans ASP.Net MVC, nous avons des filtres pour cela, donc je leur ai dit que nous utilisons des filtres pour cela. Ai-je donné la bonne réponse?
( Filtres d'action vous permet de vous connecter uniquement aux événements spécifiques MVC , tandis que les modules HTTP vous permettent de vous connecter à ASP.Net événements . Donc, même dans MVC, pour implémenter un module HTTP et un gestionnaire HTTP, vous devrez implémenter l'interface correspondante.
Pour expliquer les modules HTTP et les gestionnaires HTTP, le module HTTP et le gestionnaire HTTP sont utilisés par MVC pour injecter une logique de prétraitement dans la chaîne de demande.
jpg
sont traités, vous implémenterez un gestionnaire HTTP personnalisé par rapport à si vous voulez exécuter des fichiers supplémentaires lors du traitement de la demande, vous implémenterez un module HTTP personnalisé. Il n'y a toujours qu'un seul gestionnaire HTTP pour une demande spécifique mais il peut y avoir plusieurs modules HTTP.Pour implémenter un gestionnaire HTTP:
Vous implémentez la classe IHttpHandler
et implémentez la méthode ProcessRequest
et la propriété IsResuable
. La propriété IsResuable
détermine si le gestionnaire peut être réutilisé ou non.
public class MyJpgHandler: IHttpHandler
{
public bool IsReusable => false;
public void ProcessRequest(HttpContext context)
{
// Do something
}
}
Ensuite, nous devons spécifier quel type de demande sera traité par notre gestionnaire personnalisé dans web.config
fichier:
<httpHandlers>
<add verb="*" path="*.jpg" type="MyJpgHandler"/>
</httpHandlers>
Pour implémenter un module HTTP:
Nous devons implémenter IHttpModule
et enregistrer les événements requis dans la méthode Init
. À titre d'exemple simple, si nous voulions enregistrer toutes les demandes:
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() {}
}
Et enregistrez notre module dans web.config
fichier:
<httpModules>
<add name="MyHttpModule " type="MyHttpModule " />
</httpModules>