我有一个控制器,我的所有控制器都继承了这个控制器,我需要为每个控制器请求执行一些代码。我尝试了以下方法:
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);
}
但显然会在执行方法中没有会话状态,直到调用base.Execute()之后,这对我不起作用。有没有可以在ASP.NET MVC中为每个请求执行此会话代码的地方?
答案 0 :(得分:5)
尝试覆盖基本控制器中的OnActionExecuted
或将功能实现为过滤器。
答案 1 :(得分:1)
如果您希望在每个请求的ASP.NET应用程序中都能发生某些事情,那么最好将其构建到IHttpModule中,而不是将其构建到控制器中。您如何保证您的继任者能够正确实施您的控制器?