Executar código em cada solicitação no ASP.NET MVC
-
05-07-2019 - |
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?
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?