.NET 6中如何将API返回的FileStreamResult转为FileContentResult
解决API调用后返回FileContentResult的问题
核心要点:FileContentResult 需要字节数组作为输入而非流,所以你需要将API 01返回的响应内容读取为字节数组,同时保留原响应的Content-Type信息。
修改后的API 02代码如下:
var endPoint = $"/api/image/user/{email}"; var response = await _client.GetAsync(new Uri(endPoint, UriKind.Relative)).ConfigureAwait(false); // 先校验响应状态,处理API 01返回的错误情况 if (!response.IsSuccessStatusCode) { return NotFound(); // 对应API 01的NotFound逻辑,可根据实际需求调整 } // 获取原响应的Content-Type,保证返回文件的类型一致性 var contentType = response.Content.Headers.ContentType?.ToString() ?? "application/octet-stream"; // 将响应内容读取为字节数组(FileContentResult的必填参数类型) var fileBytes = await response.Content.ReadAsByteArrayAsync().ConfigureAwait(false); // 返回FileContentResult,可选设置下载文件名 return new FileContentResult(fileBytes, contentType) { FileDownloadName = $"user_{email}.png" // 根据实际文件类型调整后缀,可省略该属性 };
关键说明:
- 必须先检查响应状态码,避免在失败响应上执行后续读取操作
- 复用API 01返回的Content-Type,确保客户端收到的文件类型正确
- 使用
ReadAsByteArrayAsync()替代ReadAsStreamAsync(),匹配FileContentResult的参数要求 - 可选设置
FileDownloadName,让客户端下载文件时自动使用指定名称
内容的提问来源于stack exchange,提问作者Hash_Dew
相关产品推荐
相关产品推荐

