代码之家  ›  专栏  ›  技术社区  ›  Richard Ev

AOP、Unity、拦截器和ASP.NET MVC控制器操作方法

  •  1
  • Richard Ev  · 技术社区  · 15 年前

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

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

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

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

    编辑

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

    System.ArgumentNullException: Value cannot be null.
    Parameter name: str
       at System.Reflection.Emit.DynamicILGenerator.Emit(OpCode opcode, String str)
       at Microsoft.Practices.ObjectBuilder2.DynamicMethodConstructorStrategy.PreBuildUp(IBuilderContext context)
       at Microsoft.Practices.ObjectBuilder2.StrategyChain.ExecuteBuildUp(IBuilderContext context)
    
    2 回复  |  直到 12 年前
        1
  •  1
  •   Robert Koritnik    12 年前

    你见过吗? 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
  •  0
  •   Stefan Egli    15 年前

    不完全是你想问的,但你可能想考虑 log4postsharp . 也许你需要 this 但我不能肯定,因为我到目前为止还没有使用ASP.NET MVC