FieldInfo.getValue Возвращает 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, И все же поле (при наблюдении через отладчик) не ноль. Еще более головоломки, код здесь выше, работает для других свойств объекта.

Единственный странный аспект - два флага 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 о: Соображения безопасности для отражения

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top