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

use*_*536 4 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);
    }  
}
Run Code Online (Sandbox Code Playgroud)

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

Jan*_*rck 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
{
    // ...
}
Run Code Online (Sandbox Code Playgroud)


Qud*_*dus 8

Jan 的答案的更新。抽象方法onExecutingAction现在是公共的,不受保护。

public virtual void OnActionExecuting(ActionExecutingContext context);
Run Code Online (Sandbox Code Playgroud)

protected因此,重写时不能使用访问修饰符。相反,将其公开。

public class BaseController : Controller
{
    public override void OnActionExecuting(ActionExecutingContext context)
    {
        base.OnActionExecuting(context);
    }
}
Run Code Online (Sandbox Code Playgroud)