我找到了解決方案。不是很好,但它解決了我的問題。
我在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