【问题标题】:How to properly dispose the stream when using StreamContent使用 StreamContent 时如何正确处理流
【发布时间】:2016-12-11 14:03:41
【问题描述】:

我正在尝试从我的 webapi 端点返回一个流,然后通过释放该流进行清理。

我希望这是正确的方法,但流当然是在返回之前被处理掉的。

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

    return response;
}

处理流的正确方法是什么?

(由于 MSDN 没有说明 StreamContent 的行为或其方法,我的临时解决方案是将流的内容复制到字节数组并返回。)

【问题讨论】:

    标签: c# .net asp.net-web-api


    【解决方案1】:

    由于您唯一需要处理的资源是 HttpResponseMessage 的内容,因此您不必担心。该框架为您完成了处置。它将处理HttpResponseMessage,它将完成所有需要的处理。删除 using ,它应该可以正常工作。

    HttpResponseMessage 将在释放其内容时释放它。 见.NET Core implementation

    StreamContent 将在释放时释放其流。 见.NET Core implementation of StreamContent

    如果您需要处理 HttpResponseMessage 未处理的内容,您可以使用 request.RegisterForDispose,如 Filip Woj 所述

    【讨论】:

    • 这是否也适用于响应?即:当HttpResponseMessage 被处置时,其关联的HttpRequestMessage 是否也被处置?我会假设请求需要单独处理。
    猜你喜欢
    • 2017-08-03
    • 1970-01-01
    • 2016-10-13
    • 2016-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-31
    相关资源
    最近更新 更多