【发布时间】:2016-04-20 15:32:33
【问题描述】:
我正在使用 postsharp OnMethodBoundaryAspect。在此示例中覆盖条目,以便我可以记录参数以进行跟踪。我需要掩盖潜在的个人身份信息。
使用下面的代码,我可以通过扫描我用“PII”属性标记的那些属性来做到这一点。但是,问题是由于某种原因,我无法创建 Arguments 对象的副本。我什至尝试过使用 Arguments 的“Clone”方法,但每当我使用 SetValue 更新属性时,它仍然会发生变化。
这里有什么我遗漏的吗?
public override void OnEntry(MethodExecutionArgs args){
int count = args.Arguments.Count();
object[] argsCopy = new object[count];
args.Arguments.CopyTo(argsCopy, 0);
foreach(var arg in argsCopy)
{
MaskPiiDecorated(arg);
}
WriteEvent((int)EventId.Info, argsCopy.ToArray());
}
private object MaskPiiDecorated(object arg)
{
//Gets all properties
IEnumerable<PropertyInfo> topProperties = arg.GetType().GetProperties();
//Gets sub properties that could have properties
IEnumerable<PropertyInfo> nonValueTypeSubProperties = topProperties.Where(
prop => !prop.PropertyType.IsValueType
&& prop.PropertyType != typeof(string)
&& prop.PropertyType.BaseType != typeof(Array));
//Recursion for sub properties
nonValueTypeSubProperties.ToList().ForEach(
subProperty => { MaskPiiDecorated(subProperty.GetValue(arg)); });
topProperties.Where(prop => prop.IsDefined(typeof(PiiAttribute), false))
.ToList().ForEach(decor => { decor.SetValue(arg, "***REMOVED****"); });
return arg;
}
【问题讨论】:
标签: c# logging postsharp privacy