Отражение - почему я не могу получить доступ к этому свойству HttpRequest?

Я использую следующий метод для вывода объектов с их свойствами. Он отлично работает с большинством объектов, но выдает ошибку, когда я передаю объект HttpRequest.

public static string ConvertToXML(object obj)
{
        if (!obj.GetType().IsPrimitive && obj.GetType() != typeof(String) && obj.GetType() != typeof(Decimal))
        {
            List<string> properties = new List<string>();
            foreach (PropertyDescriptor descriptor in TypeDescriptor.GetProperties(obj))
            {
                string name = descriptor.Name;
                object value = descriptor.GetValue(obj);
                properties.Add(xmlify(name, value));
            }
            if (properties.Count == 0)
                return obj.ToString();
            else
                return xmlify(obj, string.Concat(properties));
        }
        else
            return obj.ToString();
}

Выдает ошибку в этой строке:

descriptor.GetValue(obj);

Ошибка (извините, есть только немецкая версия: /):

Der Eigenschaftenaccessor HttpChannelBinding für das System.Web.HttpRequest-Objekt hat folgende Ausnahme verursacht: Die Operation wird auf dieser Plattform nicht unterstützt.

В нем говорится, что метод доступа Property для свойства HTTPChannelBinding не поддерживает операцию на этой платформе.

Это почему?


person magnattic    schedule 19.08.2011    source источник
comment
Вы рассматривали возможность использования obj.GetType().GetProperties()? Затем у вас есть вызов другого метода property.GetValue(obj, null), который может иметь некоторую основную разницу.   -  person Tejs    schedule 19.08.2011


Ответы (2)


RTFM ;-) MSDN заявляет, что:

PlatformNotSupportedException - текущий объект HttpWorkerRequest не является объектом System.Web.Hosting.IIS7WorkerRequest или объектом System.Web.Hosting.ISAPIWorkerRequestInProc.

Вы не должны предполагать, что чтение значения любого свойства не может вызвать исключение.

person Ondrej Tucny    schedule 19.08.2011
comment
Итак, что я буду делать в такой ситуации? Поймать исключение и двигаться дальше? - person magnattic; 19.08.2011
comment
Это зависит от уникальной семантики вашего кода. Скорее всего, поймайте его, зарегистрируйте / проигнорируйте и двигайтесь дальше. - person Ondrej Tucny; 20.08.2011

Я думаю, что MSDN дает вам больше информации:

Выдает исключение PlatformNotSupportedException, если текущий объект HttpWorkerRequest не является объектом System.Web.Hosting.IIS7WorkerRequest или объектом System.Web.Hosting.ISAPIWorkerRequestInProc.

Он должен работать на Windows Vista (SP1) / Windows 7 или Windwods 2008 Server (кроме ядра). Это может быть ваша проблема.

msdn

person Bernhard Kircher    schedule 19.08.2011