首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何拦截MVC应用程序中的所有控制器调用?

如何拦截MVC应用程序中的所有控制器调用?
EN

Stack Overflow用户
提问于 2012-02-22 03:24:11
回答 3查看 9.6K关注 0票数 16

在MVC-3中有没有快速拦截所有控制器调用的方法?

出于日志记录和测试的目的,我想构建一个可以拦截所有控制器调用的工具,并记录哪个控制器被调用,使用哪个消息,在什么时间。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-02-22 03:36:54

我不记得我是从哪里得到这个的,但我在一段时间前四处寻找了类似的东西,发现了一篇文章或某处包含这个日志过滤器的东西:

代码语言:javascript
复制
public class LogActionFilter : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        Log("OnActionExecuting", filterContext.RouteData);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        Log("OnActionExecuted", filterContext.RouteData);
    }

    public override void OnResultExecuting(ResultExecutingContext filterContext)
    {
        Log("OnResultExecuting", filterContext.RouteData);
    }

    public override void OnResultExecuted(ResultExecutedContext filterContext)
    {
        Log("OnResultExecuted", filterContext.RouteData);
    }

    private void Log(string methodName, RouteData routeData)
    {
        var controllerName = routeData.Values["controller"];
        var actionName = routeData.Values["action"];
        var message = string.Format("{0} controller: {1} action: {2}", methodName, controllerName, actionName);
        Debug.WriteLine(message, "Action Filter Log");
    }
}

要使用它,只需将其添加到global.asax中的全局过滤器:

代码语言:javascript
复制
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new LogActionFilter());
}

我现在就去看看能不能找到来源。

编辑:找到了。是this question发来的。

票数 24
EN

Stack Overflow用户

发布于 2012-02-22 03:31:20

根据站点已经有多大,您可以在框架的Controller类和主控制器之间的层次结构中创建一个类。

就像这样

代码语言:javascript
复制
public class MyBaseController : Controller {
    protected override void OnActionExecuting(ActionExecutingContext filterContext) {
        // your logging stuff here
        base.OnActionExecuting(filtercontext);
    }
}

然后你的其他控制器可以从这个继承,例如

代码语言:javascript
复制
public class HomeController : MyBaseController {
    // action methods...
}
票数 5
EN

Stack Overflow用户

发布于 2012-02-22 03:31:39

有一个由Phil Haack开发的路由调试器

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9383808

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档