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

使用Microsoft.Identity.Web的IDownstreamApi下载文件遇JsonException求解

使用Microsoft.Identity.Web的IDownstreamApi下载文件的正确方式

可以用IDownstreamApi下载文件,你遇到的问题是因为默认情况下GetForAppAsync<T>会尝试将API响应反序列化为JSON,但文件内容并非JSON格式,因此抛出了JsonException。

正确的做法是直接获取原始HttpResponseMessage,手动处理响应流,避免自动JSON解析:

var response = await downstreamApi.GetForAppAsync<HttpResponseMessage>(Definitions.FileshareApi, options =>
{
    options.RelativePath = $"{ApiPaths.FileDownload}{sourceUri}";
    // 禁用自动JSON解析,保留原始响应
    options.ResponseType = ResponseType.Plain;
}, cancellationToken: cancellationToken);

if (response.IsSuccessStatusCode)
{
    using var targetStream = new FileStream(targetFilePath, FileMode.Create);
    using var responseStream = await response.Content.ReadAsStreamAsync(cancellationToken);
    await responseStream.CopyToAsync(targetStream, cancellationToken);
    return true;
}

// 可选:处理请求失败的情况,比如抛出异常或返回错误状态
// response.EnsureSuccessStatusCode();
return false;

关键说明:

  • 指定返回类型为HttpResponseMessage,可以直接访问响应的原始内容
  • 设置ResponseType.Plain,告诉IDownstreamApi不要对响应做JSON反序列化处理
  • 使用using语句管理流资源,确保操作完成后自动释放资源,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 04:00:04