Pergunta

Eu tenho um controlador que todos os meus controladores de herdar e eu preciso executar algum código para cada pedido do controlador. Eu tentei o seguinte:

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);
}

Mas, aparentemente, o estado da sessão não está disponível no método de execução até após a chamada para base.Execute (), que não funciona para mim. Existe um lugar onde eu possa executar este código de sessão para cada pedido no ASP.NET MVC?

Foi útil?

Solução

Tente substituindo OnActionExecuted no controlador de base ou implementar a funcionalidade como um filtro.

Outras dicas

Se você quer que algo aconteça em um aplicativo ASP.NET em cada solicitação, você é provavelmente melhor fora construindo-o em um IHttpModule ao invés de construir-lo em um controlador. Como você garantir o seu sucessor irá implementar seu controlador corretamente?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top