2016-09-02 105 views
3

下面用于记录的索引和方面方法。如何将参数的名称传递给方面方法

操作:

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

看点方法:

[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]等参数。

如果我在控制器中使用记录器,则反射会很容易,但是我正在使用方面方法执行此过程。

回答

2

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

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

返回null都选择和来源,但我得到了你的观点努力实现这个.. – TyForHelpDude