【问题标题】:How do I Copy Properties From one HttpWebRequest to Another?如何将属性从一个 HttpWebRequest 复制到另一个?
【发布时间】:2012-01-09 13:52:11
【问题描述】:

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

这就是我想要完成的:

  1. 从现有的 HttpWebRequest 备份属性

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

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

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

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

关于如何实施第三步的任何想法? 目前我可以使用以下方法获取每个属性的名称:

properties[index].Name

但我无法引用该值。

【问题讨论】:

    标签: c# reflection properties httpwebrequest


    【解决方案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);
    }
    

    【讨论】:

    • 这看起来像我想要的,让我现在试试。我会尽快让你知道它是否有效。谢谢!
    • 代码未经测试并且是从内存中编写的,但我已经写了几十次,所以我相当有信心它会按原样工作。
    • "找不到属性集方法。" Forth 属性引发了这个错误。名称是:“HaveResponse”
    • 我会调整我的答案。我没有考虑只读属性。
    • 我刚刚添加了:If (prop.CanWrite && prop.CanRead) then, setValue.这次我走了很远,但引发了另一个异常:“TargetInvocationException Was Unhandled”
    【解决方案2】:

    你试过了吗:

    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

    【讨论】:

    • 'properties[0].GetValue(null,null)' 抛出类型为 'System.Reflection.TargetException' 的异常对象 {System.Reflection.TargetException}
    • 抱歉,我给了你当时我能想到的最笼统的描述。我根据您的具体情况对其进行了定制,但现在@M.Babcock 有一个更好的答案:)
    猜你喜欢
    • 1970-01-01
    • 2019-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多