Exécutez le code sur chaque requête dans ASP.NET MVC
-
05-07-2019 - |
Question
J'ai un contrôleur dont tous mes contrôleurs héritent et j'ai besoin d'exécuter du code pour chaque demande de contrôleur. J'ai essayé ce qui suit:
protected override void Execute(System.Web.Routing.RequestContext requestContext)
{
if (Session["mallDetected"] == null)
{
Session["mallDetected"] = DateTime.Now.Ticks;
IList<Mall> malls = Mall.FindNearestByIp(Request.UserHostAddress);
if (malls.Count > 0)
{
Session["mall"] = malls[0];
}
}
base.Execute(requestContext);
}
Mais apparemment, l'état de session n'est pas disponible dans la méthode Execute avant APRÈS l'appel à base.Execute (), ce qui ne fonctionne pas pour moi. Y at-il un endroit où je peux exécuter ce code de session pour chaque demande dans ASP.NET MVC?
La solution
Essayez de remplacer OnActionExecuted
dans le contrôleur de base ou d'implémenter la fonctionnalité en tant que filtre.
Autres conseils
Si vous souhaitez que quelque chose se passe dans une application ASP.NET à chaque requête, il vaut probablement mieux l'intégrer dans un IHttpModule plutôt que dans un contrôleur. Comment garantissez-vous que votre successeur implémentera votre contrôleur correctement?