如何为每个请求执行公共代码?

时间:2013-10-09 08:47:03

标签: c# asp.net asp.net-mvc-4

是否有可能找到像Page_Load这样的功能?我有MVC应用程序,我需要运行一些代码,每个页面加载,或重新加载,或我调用一些控制器。所有类的一个共享函数?

我尝试Application_Start,但这只在第一次运行应用程序时执行。我搜索了一些像BeginRequest,但这个函数已被多次调用,我只需要先加载页面,我需要结束函数,比如整个项目的构造函数和析构函数。

以下是示例代码。

public class MvcApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();
        FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
        RouteConfig.RegisterRoutes(RouteTable.Routes);
    }  
}

document.ready不是我的理由。并且每个控制器的调用功能都是最后一个必须在调用任何其他函数之前执行代码。在结束之前,我需要运行结束功能。例如,首先我需要为所有类共享创建的mysql连接器。最后我需要关闭mysql连接。

2 个答案:

答案 0 :(得分:8)

使所有控制器继承自定义BaseController:

public class BaseController : Controller
{
    protected override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
        // your code here
    }
}

public class HomeController : BaseController // instead of Controller
{
    // ...
}

答案 1 :(得分:2)

Jan答案的更新。 onExecutingAction抽象方法现已公开,不受保护。

public virtual void OnActionExecuting(ActionExecutingContext context);

因此,您覆盖时不能使用protected访问修饰符。改为公开。

public class BaseController : Controller
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
    }
}