fieldInfo.getValue返回私人成员的null,而调试器表示字段是非null?
-
10-10-2019 - |
题
在C# / .NET 4.0中,我试图通过反射来检索字段值:
var bar = foo.GetType()
.GetField("_myField", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(foo)
我对这种情况有些困惑。返回的值是 null
, ,但是,(当通过调试器观察时)的领域不是零。更令人困惑的是,上面的代码适用于其他对象属性。
唯一奇怪的方面是两个标志 IsSecurityCritical
和 IsSecuritySafeCritical
那是 true
, ,但我什至不确定它实际上与情况有关。
我最终以小型httpmodule处于这种情况。
public class MyModule : IHttpModule
{
public void Init(HttpApplication context)
{
context.BeginRequest += BeginRequest;
}
void BeginRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
var rawContent = typeof(HttpRequest)
.GetField("_rawContent", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(app.Request);
// at this point 'rawContent' is null, while debugger indicates it is not.
}
}
有什么建议可以解释这种行为吗?
解决方案
这是由.NET 4.0中的安全模型引起的,因为您正在运行ASP.NET应用程序,该应用程序可能无法完全信任。由于该字段至关重要,因此您无法通过反射访问它。
您可以在MSDN上阅读一些有关: 反思的安全考虑
不隶属于 StackOverflow