【问题标题】:Necessary to close web request stream?需要关闭网络请求流吗?
【发布时间】:2012-08-15 01:10:55
【问题描述】:

哪种方式比较好?

答:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
Stream reqStream = req.GetRequestStream();
reqStream.Write(data, 0, data.Length);
reqStream.Close();

乙:

HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.GetRequestStream().Write(data, 0, data.Length);

【问题讨论】:

    标签: c# stream httpwebrequest


    【解决方案1】:

    我参加聚会有点晚了,但这个问题仍然很重要。我想补充: MSDN Examples 还演示/建议在写入完成时关闭流。

    Stream newStream = myHttpWebRequest.GetRequestStream ();
    newStream.Write (byte1, 0, byte1.Length);
    Console.WriteLine ("The value of 'ContentLength' property after sending the data is {0}", myHttpWebRequest.ContentLength);
    // Close the Stream object.
    newStream.Close ();
    

    我喜欢@Jon 的例子并遵循类似的模式。

    【讨论】:

      【解决方案2】:

      选项 C:

      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
      using (Stream reqStream = req.GetRequestStream())
      {
          reqStream.Write(data, 0, data.Length);
      }
      

      但是是的,我关闭请求流。 可能它不是绝对必需的,但我不想假设 - 特别是,除非您有充分的理由相信它不是必需的(例如文档),实现可能会随着时间而改变,并在以后破坏“惰性”代码。

      如果你发现自己经常这样做,你总是可以编写一个实用方法(甚至可能作为扩展方法):

      public static void WriteRequestData(this WebRequest request, byte[] data)
      {
          using (Stream reqStream = request.GetRequestStream())
          {
              reqStream.Write(data, 0, data.Length);
          }
      }
      

      那么就叫它:

      HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
      req.WriteRequestData(data);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-10-23
        • 2014-05-28
        • 2022-01-01
        • 1970-01-01
        • 2017-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多