如何记录控制器和操作详细信息?

时间:2012-09-13 19:51:11

标签: asp.net-mvc

使用ASP.NET MVC 4 RTW,如何将MVC控制器操作和参数记录到数据库?我想审核用户操作但不想真正想要在每个控制器中复制一堆代码,或者更糟糕的是,在每个操作中。有什么我可以全球实施的吗? 我理解EF /数据库方面的事情,所以这真的是关于MVC。

1 个答案:

答案 0 :(得分:1)

您应该查看自定义操作过滤器。这里有一篇很好的MSDN文章http://msdn.microsoft.com/en-us/library/dd381609(v=vs.100).aspx

filterContext.ActionDescriptor.ActionName将为您提供要记录的操作的名称,filterContext.ActionDescriptor.ControllerDescriptor.ControllerName也可能提供帮助,参数保存在filterContext.ActionParameters

这些过滤器可以全局应用于配置Global.asax中的所有操作,也可以应用于FilterConfig via下的App_Start文件夹中。

public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
    filters.Add(new HandleErrorAttribute());
    filters.Add(new LoggingFilterAttribute());
}

属性的示例代码

public class LoggingFilterAttribute : ActionFilterAttribute
{
    public override void OnActionExecuting(ActionExecutingContext filterContext)
    {
        filterContext.HttpContext.Trace.Write("(Logging Filter)Action Executing: " +
            filterContext.ActionDescriptor.ActionName);

        base.OnActionExecuting(filterContext);
    }

    public override void OnActionExecuted(ActionExecutedContext filterContext)
    {
        if (filterContext.Exception != null)
            filterContext.HttpContext.Trace.Write("(Logging Filter)Exception thrown");

        base.OnActionExecuted(filterContext);
    }
}