FieldInfo.GetValue return null für ein privates Mitglied während Debugger-Feld zeigt ist nicht null?

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

  •  10-10-2019
  •  | 
  •  

Frage

In C # / .NET 4.0 Ich versuche, einen Feldwert durch Reflektion abzurufen mit:

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

Ich bin ein bisschen durch die Situation verwirrt. Der zurückgegebene Wert ist null, und doch das Feld (wenn durch den Debugger beobachtet) nicht null ist. Noch verwirrender, den Code hier oben genannten Arbeiten für die anderen Objekteigenschaften.

Der einzige ungeradee Aspekt sind die beiden Fahnen IsSecurityCritical und IsSecuritySafeCritical die true sind, aber ich bin nicht einmal sicher, dass es auf die Situation tatsächlich relevant ist.

Ich beende mit einem kleinen Httpmodule in einer solchen Situation auf.

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.
    }
}

Jeder Vorschlag, die ein solches Verhalten erklären würde?

War es hilfreich?

Lösung

Dies wird durch das Sicherheitsmodell in .NET 4.0 verursacht, wie Sie eine asp.net Anwendung laufen lassen, die wahrscheinlich nicht in vollem Vertrauen läuft. Da die Feldsicherheit entscheidend ist, können Sie es nicht durch Reflexion zugreifen zu können.

Sie können ein bisschen auf der Msdn etwa lesen: Sicherheitsüberlegungen für die Reflektion

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top