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?

¿Fue útil?

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?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top