首页 > 解决方案 > 在不阅读内容的情况下丢弃 HttpResponseMessage 是否安全?

问题描述

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() 以避免资源泄漏是否安全。我想不出有必要阅读内容的情况,但也许我忽略了一些东西。

标签: c#.netdotnet-httpclient

解决方案


以上要点是必要的步骤吗

不。

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

是的。

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


推荐阅读