这是一个索引属性,是的还是新的?

时间:2011-06-23 00:29:20

标签: c# reflection .net-3.5 propertyinfo machinekey

我正在尝试获取当前用于加密/解密我的ViewState等的machineKey,以尝试调试另一个问题。 (我的应用程序位于服务器场中,并且每个服务器和应用程序的machine.config和web.config中都设置了机器密钥,因此试图调试某些资源未正确解密的问题。我正在尝试这是为了查看哪一个用于加密。)这是我的代码片段:

Line 1:  Type machineKeySection = typeof(MachineKeySection);
Line 2:  PropertyInfo machineKey = machineKeySection.GetProperty("ValidationKey");
Line 3:  Object validationKey = machineKey.GetValue(machineKeySection, null);
Line 4:  Response.Write(String.Format("Value: {1}", validationKey.ToString()));

按原样,第3行抛出“未将对象引用设置为对象的实例”。这意味着我可能没有正确设置第二个空参数(属性必须被索引,对吧?)。

但是machineKey的ValidationKey属性的ParameterInfo返回的长度为零(所以属性没有索引,对吧?)。

ParameterInfo[] paramInfo = machineKey.GetIndexParameters();
Response.Write(paramInfo.Length);

http://msdn.microsoft.com/en-us/library/b05d59ty(v=VS.90).aspx

显然我在这里可以看到一些东西,并且会喜欢第二双眼睛看这个。有什么建议吗?

1 个答案:

答案 0 :(得分:0)

当您传入MachineKeySection的实例时,传入的是typeof(MachineKeySection)。

Type machineKeySection = typeof(MachineKeySection);
Object validationKey = machineKey.GetValue(machineKeySection, null);

需要类似(取自here):

MachineKeySection machineKeySection = (MachineKeySection)config.GetSection("system.web/machineKey");
Object validationKey = machineKey.GetValue(machineKeySection, null);

所以回答你的问题,不,它不是一个索引属性。您可以查看文档here