Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何为每个请求执行公共代码?_C#_Asp.net_Asp.net Mvc 4 - Fatal编程技术网

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

C# 如何为每个请求执行公共代码?,c#,asp.net,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc 4,是否有可能找到类似于页面加载的功能?我有MVC应用程序,我需要运行一些代码,每一页加载,或重新加载,或我调用一些控制器。每个类都有一个共享函数 我尝试启动应用程序,但这只在应用程序第一次运行时执行。我搜索了一些类似于BeginRequest,但是这个函数已经被调用了好几次,我只需要首先,当我加载页面时,我需要结束函数,比如整个项目的构造函数和析构函数 下面是示例代码 public class MvcApplication : System.Web.HttpApplication { pr

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

我尝试启动应用程序,但这只在应用程序第一次运行时执行。我搜索了一些类似于
BeginRequest
,但是这个函数已经被调用了好几次,我只需要首先,当我加载页面时,我需要结束函数,比如整个项目的构造函数和析构函数

下面是示例代码

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

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

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

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

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

简回答的最新情况。
onExecutingAction
抽象方法现在是公共的,不受保护

public virtual void OnActionExecuting(ActionExecutingContext context);
因此,重写时不能使用
受保护的
访问修饰符。把它公之于众

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

您可以使用MVC中的布局调用控制器中的函数。每次加载/重新加载页面时都会点击此按钮。也许您正在寻找一个<代码>应用程序_BeginRequest也会触发静态文件。BeginRequest是个好主意,但我尝试过,函数被调用了好几次,而不是只调用过一次。正如@Stijn ActionFilter所述,这似乎是一个非常有趣的选项,允许保留轻量级控制器,而不会妨碍代码的技术层次结构。是的,这是更好的解决办法。你知道我是如何在BaseController中设置析构函数的吗?假设你的意思不是“析构函数”,而是“在处理请求后做点什么”,那么你应该用与OnActionExecuting相同的方式使用OnActionExecuted。如果在垃圾收集器处理任何控制器时,您绝对必须执行某些操作,只需将~BaseController()函数定义为普通函数即可。请注意,您完全无法控制何时调用此函数。是否有关于控制器生命周期的正式文档?还有哪些方法可以覆盖?@style,这里有关于整个MVC管道的大量文档:。建议下载此页面上的PDF以获得更好的视图。但是如果需要在BaseController中注入依赖项,该怎么办?需要等待调用API吗?API中的信息应该在所有控制器中使用。非常感谢你,我花了几个小时试图解决这个问题。