我找到了解决方案。不是很好,但它解决了我的问题。
我在David Ebbo的博客(http://blog.davidebbo.com/2011/02/register-your-http-modules-at-runtime.html)上找到使用程序集启动方法注册全局IActionFilter。
全局操作过滤器只将操作上下文存储在当前HttpContext.Items []集合中,该集合是每个请求集合。
public class GlobalActionFilter : System.Web.Mvc.IActionFilter {
internal static readonly object ActionExecutedFilterKey =
"__MvcResourceLoaderActionExecutedContext";
internal static readonly object ActionExecutingFilterKey =
"__MvcResourceLoaderActionExecutingContext";
static MvcResourceLoaderGlobalFilter __instance =
new MvcResourceLoaderGlobalFilter();
MvcResourceLoaderGlobalFilter() { }
public void OnActionExecuted(System.Web.Mvc.ActionExecutedContext filterContext) {
System.Web.HttpContext.Current.Items[ActionExecutedFilterKey] =
filterContext;
}
public void OnActionExecuting(System.Web.Mvc.ActionExecutingContext filterContext) {
System.Web.HttpContext.Current.Items[ActionExecutingFilterKey] =
filterContext;
}
public static void RegisterGlobalFilter() {
if (!System.Web.Mvc.GlobalFilters.Filters.Contains(__instance))
System.Web.Mvc.GlobalFilters.Filters.Add(__instance);
}
}
我可以随时访问上下文。
你不能创建一个'BaseController'并从中继承你的控制器。大部分的交互可以被截取。 – Eranga 2012-01-17 02:00:43
你想在哪个Global.asax中做这件事?有一些事件甚至没有可用的HttpContext。例如,如果你运行在集成模式下,Application_Start内部没有HttpContext,我们甚至不能谈论控制器和控制器上下文。 – 2012-01-17 06:57:33
这是用于应用程序启动。 – 2012-01-17 11:52:21