Выполнять код на каждый запрос в ASP.NET MVC
-
05-07-2019 - |
Вопрос
У меня есть контроллер, от которого наследуются все мои контроллеры, и мне нужно выполнить некоторый код для каждого запроса контроллера. Я попробовал следующее:
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);
}
Но, очевидно, состояние сеанса недоступно в методе Execute до ПОСЛЕ вызова base.Execute (), который у меня не работает. Есть ли место, где я могу выполнить этот код сеанса для каждого запроса в ASP.NET MVC?
Решение
Попробуйте переопределить OnActionExecuted
в базовом контроллере или реализовать эту функцию в качестве фильтра.
Другие советы
Если вы хотите, чтобы что-то происходило в приложении ASP.NET при каждом запросе, вам лучше встроить его в IHttpModule, а не в контроллер. Как вы гарантируете, что ваш преемник будет правильно реализовывать ваш контроллер? Р>