2012-01-09 83 views
0

我目前正在编写一个Lib来使用HttpWebRequest类和属性。在调用某些方法后,我需要重建类的HttpWebRequest属性,但不是从头开始。如何将属性从一个HttpWebRequest复制到另一个?

这是我想要完成的任务:从

  1. 备份性能的现有的HttpWebRequest

    System.Reflection.PropertyInfo []属性= m_HttpWebRequest.GetType().GetProperties();

  2. 重新实例化属性,创建一个新的WebRequest

    m_HttpWebRequest =(HttpWebRequest的)WebRequest.Create(requestUrl);

  3. 将复制的属性添加到新实例。我还无法做到这一点。

有关如何实施第三步的任何想法? 目前我可以用得到的每个属性的名称:

properties[index].Name 

但我不能参考价值。

回答

1

这应该粗略地让你有:

foreach(var prop in m_HttpWebRequest.GetType().GetProperties()) 
{ 
    if(!(prop.CanWrite && prop.CanRead)) 
     continue; 

    var val = prop.GetValue(m_HttpWebRequest, BindingFlags.GetProperty, null, null, null); 
    if (val == null) 
     continue; 

    prop.SetValue(m_HttpWebRequest2, val, BindingFlags.SetProperty, null, null, null); 
} 
+0

这看起来像我想要的,现在让我试试看。 如果有效,我会尽快通知您。 谢谢! – 2012-01-09 14:10:14

+0

该代码未经测试并从内存中写入,但我已经写了几十次,所以我相当确信它会按原样运行。 – 2012-01-09 14:12:28

+0

“找不到属性集方法”。 Forth属性引发此错误。名称是:“HaveResponse” – 2012-01-09 14:13:37

1

你试过:

var value = propertyInfo.GetValue(m_HttpWebRequest, null); 

您的情况:

foreach (PropertyInfo propertyInfo in m_HttpWebRequest.GetType().GetProperties()) 
{ 
    if (propertyInfo.GetValue(m_HttpWebRequest, null) != null) propertyInfo.SetValue(m_HttpWebRequest2,propertyInfo.GetValue(m_HttpWebRequest, null), null); 
} 

了解更多关于它:

http://msdn.microsoft.com/en-us/library/b05d59ty.aspx

+0

'properties [0] .GetValue(null,null)'抛出一个异常'System.Reflection.TargetException'\t object {System.Reflection.TargetException} – 2012-01-09 14:08:46

+0

对不起,我给你最通用的描述I在那个时刻可以想到。我将它定制为您的具体情况,但现在@ M.Babcock有更好的答案:) – carlossless 2012-01-09 14:37:12

相关问题