gpt4 book ai didi

.net - 超出 HttpClient 缓冲区大小限制

转载 作者:行者123 更新时间:2023-12-03 14:40:46 30 4
gpt4 key购买 nike

我正在使用我的客户端获取有关存储在我的 Swift 对象存储中的某个文件的一些信息,该文件可以通过 REST Api 访问。在 Swift 中,指向指定对象的 HEAD 方法和 url 返回它的元数据(哈希、时间戳等),包含在 HTML 响应的(没有内容) header 中。

当文件大小 < 2GB 时,我的代码可以完美运行。我得到 HttpResponseMessage 并且能够解析它以获得所需的数据,但是当我要求文件 > 2GB 时,我得到异常:“无法向缓冲区写入比配置的最大缓冲区大小更多的字节:2147483647”。

我了解,HttpClient 属性 MaxResponseContentBufferSize 不能设置为值 > 2GB,但我不想获取它的内容。这是一些错误还是有更好的方法来解决这个问题?

public HttpResponseMessage FileCheckResponse(string objectName)
{
//create url which will be appended to HttpClient (m_client)
string requestUrl = RequestUrlBuilder(m_containerName, objectName);
//create request message with Head method
HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Head, requestUrl);
//exception thrown here...
HttpResponseMessage response = m_client.SendAsync(request).Result;

return response;
}

当尝试使用 Dev HTTP 客户端(Chrome 扩展)执行相同的操作时,我没有问题。似乎 Content-Length header 使其不可行。这是 Dev HTTP 客户端的输出:
Content-Length: 3900762112
Accept-Ranges: bytes
Last-Modified: Fri, 06 Sep 2013 16:24:30 GMT
Etag: da4392bdb5c90edf31c14d008570fb95
X-Timestamp: 1378484670.87557
Content-Type: application/octet-stream
Date: Tue, 10 Sep 2013 13:25:27 GMT
Connection: keep-alive

我会很高兴有任何想法!
谢谢

解决方案

首先 - 感谢 Darrel Mirrel,他在几秒钟内解决了我一整天的问题 :)
我只需要通过在获得响应的位置添加 HttpCompletitionOption 来编辑代码中的一行:
HttpResponseMessage response = m_client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead).Result;

选项 ResponseHeaderRead 告诉客户端在不读取消息内容的情况下读取 header 后立即完成操作。

最佳答案

使用允许您指定 HttpCompletionOptions 的 SendAsync 重载。有了这个,你可以告诉 HttpClient 不要为响应内容创建缓冲区。

关于.net - 超出 HttpClient 缓冲区大小限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18720435/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com