使用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
相关产品推荐
相关产品推荐

