fieldinfo.getvalueプライベートメンバーのnull nullデバッガーはフィールドが非nullであることを示しますか?

StackOverflow https://stackoverflow.com/questions/4441561

  •  10-10-2019
  •  | 
  •  

質問

C# / .NET 4.0では、以下を反映してフィールド値を取得しようとしています。

var bar = foo.GetType()
  .GetField("_myField", BindingFlags.Instance | BindingFlags.NonPublic)
  .GetValue(foo)

私は状況に少し困惑しています。返される値はです null, 、それでも、フィールド(デバッガーを通して観察された場合)はヌルではありません。さらに不可解に、ここのコードは他のオブジェクトプロパティで機能します。

唯一の奇妙な側面は2つのフラグです IsSecurityCriticalIsSecuritySafeCritical そうです 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で少し読むことができます 反省のためのセキュリティ上の考慮事項

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top