2016-08-05 11 views
13

私のwebapiエンドポイントからストリームを返そうとしていて、ストリームを破棄してクリーンアップしようとしています。StreamContentを使用するときにストリームを正しく処理する方法

これは正しい方法だと思っていましたが、ストリームはもちろん返される前に処分されています。

using(var stream = GetStream()){ 
    var response = new HttpResponseMessage(); 
    response.Content = new StreamContent(stream); 

    return response; 
} 

ストリームを廃棄する正しい方法は何でしょうか?

(MSDNがStreamContentまたはそのメソッドの動作については何も言わないので、私の一時的な解決策は、バイト配列にストリームの内容をコピーし、それを返すことです。)

答えて

21

にする必要がある唯一の資源として、あなたがそれを心配する必要はありませんHttpResponseMessageの内容です。フレームワークはあなたのために処分します。それは必要なすべての処分を行うHttpResponseMessageを処分する。使用を取り除くとうまくいくはずです。

HttpResponseMessageは、コンテンツが破棄されたときに破棄します。 を参照してください。.NET Core implementation

StreamContentはストリームが破棄されたときに破棄します。 Filip Woj

によって記載されているように、あなたが request.RegisterForDisposeを使用することができHttpResponseMessageで配置されていないものを処分する必要がある場合は .NET Core implementation of StreamContent

を参照してください。

関連する問題