fieldinfo.getvalueプライベートメンバーのnull nullデバッガーはフィールドが非nullであることを示しますか?
-
10-10-2019 - |
質問
C# / .NET 4.0では、以下を反映してフィールド値を取得しようとしています。
var bar = foo.GetType()
.GetField("_myField", BindingFlags.Instance | BindingFlags.NonPublic)
.GetValue(foo)
私は状況に少し困惑しています。返される値はです null
, 、それでも、フィールド(デバッガーを通して観察された場合)はヌルではありません。さらに不可解に、ここのコードは他のオブジェクトプロパティで機能します。
唯一の奇妙な側面は2つのフラグです 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.
}
}
そのような行動を説明する提案はありますか?
解決
これは、ASP.NETアプリケーションを実行しているため、.NET 4.0のセキュリティモデルによって引き起こされます。フィールドはセキュリティクリティカルであるため、反射を通じてアクセスすることはできません。
あなたは次のことについてMSDNで少し読むことができます 反省のためのセキュリティ上の考慮事項
所属していません StackOverflow