Ejecutar código en cada solicitud en ASP.NET MVC
-
05-07-2019 - |
Pregunta
Tengo un controlador del que todos mis controladores heredan y necesito ejecutar algún código para cada solicitud de controlador. Intenté lo siguiente:
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);
}
Pero, aparentemente, el estado de la sesión no está disponible en el método Ejecutar hasta DESPUÉS de la llamada a base.Execute (), que no funciona para mí. ¿Hay algún lugar donde pueda ejecutar este código de sesión para cada solicitud en ASP.NET MVC?
Solución
Intente anular OnActionExecuted
en el controlador base o implementar la funcionalidad como un filtro.
Otros consejos
Si desea que ocurra algo en una aplicación ASP.NET en cada solicitud, probablemente sea mejor que lo cree en un módulo IHttp en lugar de hacerlo en un controlador. ¿Cómo garantiza que su sucesor implementará su controlador correctamente?