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中的信息应该在所有控制器中使用。非常感谢你,我花了几个小时试图解决这个问题。