如何将参数名称传递给方面方法
How to pass name of parameters to aspect methods
下面用于记录的索引和方面方法。
操作:
[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);
}
}
我可以像 [1]
一样得到 projectid
的整数值。
但是你猜我正在使用这个方面的方法来记录这个信息,如果没有参数的名称(它被写入数据库)就没有意义所以我想得到像 [projectId:1]
这样的参数等等
如果我在控制器中使用记录器但我在方面方法中执行此过程,则反射会很容易。
Arguments
仅包含值。但是,您在 Method
:
中确实有通常的反射界面
args
.Method
.GetParameters()
.Select((p, i) => new { Name = p.Name, Value = args.Arguments[i] });
下面用于记录的索引和方面方法。
操作:
[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);
}
}
我可以像 [1]
一样得到 projectid
的整数值。
但是你猜我正在使用这个方面的方法来记录这个信息,如果没有参数的名称(它被写入数据库)就没有意义所以我想得到像 [projectId:1]
这样的参数等等
如果我在控制器中使用记录器但我在方面方法中执行此过程,则反射会很容易。
Arguments
仅包含值。但是,您在 Method
:
args
.Method
.GetParameters()
.Select((p, i) => new { Name = p.Name, Value = args.Arguments[i] });