5

どちらの方法が好ましいですか?

A:

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

B:

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

2 に答える 2

13

代わりにオプション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);
于 2012-08-19T08:30:57.507 に答える
1

私はパーティーに少し遅れていますが、この質問はまだ関連しています。追加したいのですが、 MSDNの例では、書き込みが完了したときにストリームを閉じることも示しています。

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の例が好きで、同様のパターンに従います。

于 2014-02-06T21:41:36.157 に答える