在每个请求上执行代码

时间:2009-11-30 16:48:50

标签: asp.net-mvc

我希望能够在将数据填充到ViewData中的每个请求上执行一些代码。目前我有一个所有控制器继承的基本控制器类,我重写OnActionExecuting并在那里进行。

我唯一关心的是这种方法是谁创建了一个新的控制器,必须继承基类。

有没有办法在global.asax中注册一些内容,就像使用自定义模型绑定器一样,可以运行每个请求?有点像全球动作过滤器或其他东西。

2 个答案:

答案 0 :(得分:2)

global.asax中,您可以向Application_BeginRequest添加一个处理程序,该处理程序在每个HTTP请求之前运行。您还可以创建custom HTTP module来处理相同的内容。

答案 1 :(得分:2)

您可以使用custom action invoker,而不是使用基本控制器类(我认为这是大多数情况下的最佳选择)。我将从内置动作调用程序派生出来并撒上您需要的额外内容。您在应用程序启动期间在global.asax中注册了动作调用者,它可以覆盖OnActionExecuting / OnActionExecuted / OnResultExecuting / OnResultExecuted。例如,您可以使用OnResultExecuting添加一些ViewData。此时,您将知道已完成的操作,并且还知道ActionResult的类型。