Eseguire il codice su ogni richiesta in ASP.NET MVC
-
05-07-2019 - |
Domanda
Ho un controller da cui ereditano tutti i miei controller e devo eseguire del codice per ogni richiesta di controller. Ho provato quanto segue:
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);
}
Ma a quanto pare lo stato della sessione non è disponibile nel metodo Execute fino a DOPO la chiamata a base.Execute (), che per me non funziona. Esiste un luogo in cui posso eseguire questo codice di sessione per ogni richiesta in ASP.NET MVC?
Soluzione
Prova a sostituire OnActionExecuted
nel controller di base o implementa la funzionalità come filtro.
Altri suggerimenti
Se vuoi che qualcosa accada in un'applicazione ASP.NET su ogni richiesta, probabilmente stai meglio costruendolo in un IHttpModule piuttosto che costruirlo in un controller. Come garantite che il successore implementerà correttamente il controller?