【问题标题】:Aop, Unity, Interceptors and ASP.NET MVC Controller Action MethodsAop、Unity、拦截器和 ASP.NET MVC 控制器操作方法
【发布时间】:2009-08-27 13:36:02
【问题描述】:

使用 log4net,我们希望记录对 ASP.NET MVC 控制器操作方法的所有调用。

日志应包含有关传递给控制器​​的任何参数的信息。

我们希望在Interceptors via Unity 中使用 AoP 方法,而不是在每个操作方法中手动编码。

我们已经将它与其他一些使用接口的类一起使用(使用InterfaceInterceptor)。但是,我们不确定如何继续使用我们的控制器。我们是否应该稍微修改它们以使用接口,还是有更简单的方法?

编辑

VirtualMethodInterceptor 似乎是正确的方法,但是使用它会导致以下异常:

System.ArgumentNullException:值不能为空。 参数名称:str 在 System.Reflection.Emit.DynamicILGenerator.Emit(OpCode 操作码,字符串 str) 在 Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext 上下文) 在 Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext 上下文)

【问题讨论】:

    标签: .net log4net unity-container aop


    【解决方案1】:

    你见过 this [链接断开]

    以下内容摘自 David Hayden 提供的损坏/丢失的博客文章

    这是一个LogFilterAttribute,它使用企业库日志记录应用程序块LogWriter 来记录消息。

    public class LogFilterAttribute : ActionFilterAttribute
    {
        public LogWriter Logger { get; set; }
     
        public string Category { get; set; }
     
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            string message = string.Format(
                "{0} ActionMethod on {1}Controller executing...",
                filterContext.ActionDescriptor.ActionName,
                filterContext.ActionDescriptor.ControllerDescriptor.ControllerName);
     
            var category = Category ?? "General";
     
            Logger.Write(new LogEntry {
                Message = message,
                Categories = new[] { category }
            });
        }
    }
    

    【讨论】:

    • 马克,这个链接坏了,因为大卫海登出于某种原因决定重新开始并删除所有以前的博客内容。多么愚蠢的决定。不幸的是,您的答案现在完全无法使用。让我试着让它至少好一点。
    【解决方案2】:

    不完全是您的要求,但您可能需要考虑log4postsharp。也许你也需要this,但我不能确定,因为到目前为止我还没有使用过 ASP.Net MVC

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-02-14
      • 2018-03-31
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-10
      相关资源
      最近更新 更多