You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用HttpClientFactory批量请求OneDrive千张图片遇302跳转问题

OneDrive批量请求图片内容返回302的解决方法

问题原因

调用OneDrive的/items/{id}/content接口获取文件内容时,服务端会返回302重定向响应,指向临时的文件下载URL,这是OneDrive的默认行为——不管是单请求还是批量请求,单个子请求都会返回302。你的代码错误地尝试读取响应的Content内容,而实际需要的下载地址在响应头的Location字段中。

修正后的代码

将批量响应处理部分的代码替换为以下内容:

// Process the responses to get the download URL
foreach (var item in batchItems)
{
    if (requestIdToItemIdMap.TryGetValue(item.Id, out var requestId))
    {
        var contentResponseItem = await contentResponse.GetResponseByIdAsync(requestId);
        // 提取Location头作为下载URL
        if (contentResponseItem.Headers.TryGetValues("Location", out var locationValues))
        {
            var downloadUrl = locationValues.FirstOrDefault();
            if (!string.IsNullOrEmpty(downloadUrl))
            {
                stockDropDriveItems.Add(new StockdropDriveItem
                {
                    Name = item.Name,
                    DownloadUrl = downloadUrl
                });
            }
        }
    }
}

额外说明

  1. 临时下载URL有有效期限制,通常为1小时左右,如果需要长期访问,建议生成共享链接或者直接存储文件内容(比如你代码中前面的Base64转换方式)。
  2. 代码中前面的单请求获取内容并转Base64的逻辑和后面的批量请求逻辑重复了,可以根据需求保留一种——如果需要批量获取下载地址,就去掉前面的单请求循环,避免重复调用接口浪费资源。

内容的提问来源于stack exchange,提问作者Nguyen Vodka

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:13:16