反思 - 为什么我不能访问这个HttpRequest属性?

时间:2011-08-19 16:54:00

标签: c# .net reflection properties 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.

它表示HTTPChannelBinding属性的Property访问器不支持此平台上的操作。

为什么?

2 个答案:

答案 0 :(得分:2)

RTFM ;-) MSDN states

  

PlatformNotSupportedException - 当前HttpWorkerRequest对象不是System.Web.Hosting.IIS7WorkerRequest对象或System.Web.Hosting.ISAPIWorkerRequestInProc对象。

你不应该假设读取一般任何属性的值都不能抛出异常。

答案 1 :(得分:0)

我认为MSDN为您提供了更多信息:

  

如果当前的HttpWorkerRequest对象不是System.Web.Hosting.IIS7WorkerRequest对象或System.Web.Hosting.ISAPIWorkerRequestInProc对象,则抛出PlatformNotSupportedException。

它应该适用于Windows Vista(SP1)/ Windows 7或Windwods 2008 Server(核心除外)。 这可能是你的问题。

msdn