在不读取内容的情况下丢弃HttpResponseMessage是否安全?

时间:2018-07-23 18:53:49

标签: c# .net dotnet-httpclient

我正在使用HttpClient获取一个HttpResponseMessage对象。取决于标题,我实际上并不关心响应主体,因此我不想读取主体内容,而只是丢弃它。

即使在内容字节被立即丢弃的情况下,我也看到了一些在线阅读响应正文的示例,我试图了解是否有必要。例如,我找到了执行此操作的GitHub gist,行124:

if (DownloadContentOnRedirect && response.Content != null)
{
    await response.Content.ReadAsByteArrayAsync();
}

这是我正在做的事的一个例子:

using (var request = new HttpRequestMessage(HttpMethod.Get, uri))
{
    var response = await (httpClient.SendAsync(request, CancellationToken.None));

    // Some code here related to the work being done but not 
    // touching the response.

    if (!CheckSomeHeaders(response))
    {
        // Response may have large body. Do not read, discard.
        response.Dispose(); // Is this correct / enough?
    }
    else
    {
        // Do some other stuff. Response will be returned to
        // caller and caller is responsible for handling it.
    }
}

如果我已经知道自己不感兴趣,则希望避免阅读响应正文(正文可能很长)。 请注意,response并非故意位于using块内;在某些情况下,响应可能会返回给调用者。

上述要点是必要的步骤还是只是安全地调用Dispose()以避免资源泄漏。我无法想到需要阅读内容的情况,但也许我忽略了某些事情。

1 个答案:

答案 0 :(得分:1)

  

以上要点是必要步骤

否。

  

仅调用Dispose()以避免资源泄漏是安全的。

是的。

但是在大​​多数情况下,没有必要。如果将其重构为包装在using

中,它将在超出范围时进行处理。