FieldInfo.GetValue null retour d'un membre privé alors que débogueur indique un champ est non nul?

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

  •  10-10-2019
  •  | 
  •  

Question

Dans C # / .NET 4.0 Je suis en train de récupérer une valeur de champ par la réflexion avec:

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

Je suis un peu perplexe par la situation. La valeur renvoyée est null, et encore, le champ (quand on l'observe à travers le débogueur) est non nulle. Encore plus déconcertant, le code ci-dessus pour les œuvres d'autres propriétés de l'objet.

Le seul aspect étrange sont les deux drapeaux IsSecurityCritical et IsSecuritySafeCritical qui sont true, mais je ne suis même pas sûr qu'il est en fait adapté à la situation.

Je termine dans une telle situation avec une petite 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.
    }
}

Toute suggestion qui pourrait expliquer un tel comportement?

Était-ce utile?

La solution

Ceci est causé par le modèle de sécurité dans .net 4.0, que vous utilisez une application asp.net, qui est probablement pas en cours d'exécution en pleine confiance. Comme le domaine est la sécurité critique, vous ne pouvez pas y accéder par la réflexion.

Vous pouvez lire un peu sur le msdn sur: Considérations sur la sécurité pour la réflexion

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top