c# - 在不阅读内容的情况下丢弃 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() 以避免资源泄漏是否安全。我想不出有必要阅读内容的情况,但也许我忽略了一些东西。
解决方案
以上要点是必要的步骤吗
不。
只是调用
Dispose()
以避免资源泄漏是否安全。
是的。
但大多数情况下没有必要。如果将其重构为包装在using
推荐阅读
- c# - LINQ 方法使用 Where、Contains 和 Foreach 使用 List 更新 Entity.DbSet
- java - 将 JLabel 图标转换为 Java 中的字节
- firebase - Firebase 服务器身份验证应用程序机密
- plc - 使用 C# 检测 Beckhoff PLC 上的代码更改
- python-3.x - 使用 Plotly 和 Python 创建视频观看时间保留图
- azure - Azure 数据工厂 - 以递归方式将 FTP 复制到数据库
- c++11 - 纯虚析构函数是否足以使类抽象?
- c# - 需要从c#中的字符串中提取列名
- ruby-on-rails - 在 Rspec 中使用 2 个独立的数据库来测试库
- macos - 如何在不升级操作系统的情况下修复 vscode Language Server 的错误