【问题标题】:How to Clone HttpWebRequest?如何克隆 HttpWebRequest?
【发布时间】:2010-12-30 09:47:07
【问题描述】:

我想设置HttpWebRequest 的一些属性,然后异步下载一些文件。但是,每次下载我都需要一份HttpWebRequest 的副本,那么如何克隆它,这样我就不必“手动”复制每个属性?

【问题讨论】:

    标签: c# .net httpwebrequest clone


    【解决方案1】:

    HttpWebRequest 不支持序列化或克隆,因此您必须实现自己的机制来保存/复制它。您可以为此任务使用序列化(或可克隆)派生类或一些包装器。

    【讨论】:

    • 那很不幸...我认为一切都应该有一个Clone() 方法,但是哦,好吧。
    • 如何克隆作为 HttpWebRequest 一部分的开放网络连接?
    • @John Saunders HttpWebRequest 中的 Connection 属性只是一个标头,而不是物理连接。处理 HttpWebResponse 是这里的另一项任务。
    • @John:哦,好吧,我并不真正关心连接。我只想要属性。实际上,我基本上想将其用作“模板”;我想在建立任何连接之前复制它。
    【解决方案2】:

    创建您自己的类来保存您感兴趣的属性。如有必要,该类可以实现IClonable。在任何情况下,使用这些属性来初始化HttpWebRequest 的每个新实例。

    【讨论】:

    • 所以...你是说我必须把它们都列出来?这正是我想要避免的:)
    • 没有魔法这回事。不可克隆的类不能被克隆。如果不能序列化,那么就不能序列化。这就是生活。
    • 没有人谈论魔法。我希望也许我可以进行某种内省并以这种方式获取属性……谁知道呢。我还在发现关于 C# 的各种事情......
    • “反思”,而不是“内省”。您可以使用反射来捕获一个实例的所有公共读/写属性,并将它们复制到另一个实例。
    【解决方案3】:

    使用 HttpWebRequest 创建多个连接时需要小心。 http://arnosoftwaredev.blogspot.com/2006/09/net-20-httpwebrequestkeepalive-and.html 由于它不可序列化,您可以创建一个包装类

    【讨论】:

    • Hrm...好吧,无论如何,我费了很大力气才限制了连接的数量。我只打算使用大约 8 个。
    猜你喜欢
    • 2010-10-17
    • 2012-05-27
    • 2012-06-17
    • 2015-01-26
    • 2011-03-31
    • 2011-08-20
    • 1970-01-01
    相关资源
    最近更新 更多