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?

È stato utile?

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?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top