如何将属性从一个HttpWebRequest复制到另一个?

时间:2012-01-09 13:52:12

标签: c# reflection properties httpwebrequest

我目前正在编写一个Lib来使用HttpWebRequest类和属性。在调用某些方法之后,我将需要重构类的HttpWebRequest属性,但不是从头开始。

这就是我想要完成的事情:

  1. 从现有的HttpWebRequest备份属性

    System.Reflection.PropertyInfo [] properties = m_HttpWebRequest.GetType()。GetProperties();

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

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

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

  4. 有关如何实施第三步的任何想法? 目前,我可以使用以下方式获取每个Property的名称:

    properties[index].Name
    

    但我无法参考该值。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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);
}