如何将参数名称传递给方面方法

时间:2016-09-02 08:37:10

标签: c# aop

用于记录下面的索引和方面方法。

动作:

[LogAspect]
public ActionResult Index(int projectId)
{
    ...
    return PartialView(model);
}

Aspect方法:

[Serializable]
public class LogAspect : OnMethodBoundaryAspect
{
    public override void OnExit(MethodExecutionArgs args)
    {
        var parameters = JsonConvert.SerializeObject(args.Arguments.ToList());
        string message = string.Format("Releted method parameters:{0}", parameters);
        Logger.Info(string.Format("Controller:{0}, Action:{1}", args.Method.DeclaringType.FullName, args.Method.ToString()), message);
        base.OnExit(args);
    }
}

我可以将projectid的值设为[1]之类的整数。 但是你猜我正在使用这种方法来记录这些信息,如果没有参数的名称(它写入数据库)就没有意义,所以我想获得像[projectId:1]这样的参数等

如果我在控制器中使用logger但是我在方法方法中执行此过程,这将很容易反射。

1 个答案:

答案 0 :(得分:2)

Arguments仅包含值。但是,您在Method中有通常的反射界面:

args
  .Method
  .GetParameters()
  .Select((p, i) => new { Name = p.Name, Value = args.Arguments[i] });