2012-01-09 73 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

相關問題