【发布时间】:2017-06-04 10:03:24
【问题描述】:
我正在尝试创建 WebAPI,它将使用 ClosedXML 库返回 Excel 文件。
如果我返回 FileStreamResult,一切正常。但是,如果我将其更改为 HttpResponseMessage,正如这里所讨论的 Web API Return A File,我将无法下载文件或查看内容并获取 JSON 字符串。
我想知道如何从这个 HttpResponseMessage 中提取文件内容。
我在浏览器或 PostMan 工具中进行了测试,得到的只是 JSON 字符串:
{
"version": {
"major": 1,
"minor": 1,
"build": -1,
"revision": -1,
"majorRevision": -1,
"minorRevision": -1
},
"content": {
"headers": [
{
"key": "Content-Disposition",
"value": [
"attachment; filename=ERSheet.xlsx"
]
},
{
"key": "Content-Type",
"value": [
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"
]
}
]
},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"requestMessage": null,
"isSuccessStatusCode": true
}
我的代码如下:
[HttpGet("ERSheet2")]
public HttpResponseMessage ER_GenerateWBLWorksheet2()
{
MemoryStream stream = new MemoryStream();
var workbook = new XLWorkbook();
var SheetNames = new List<string>() { "15-16", "16-17", "17-18", "18-19", "19-20" };
foreach (var sheetname in SheetNames)
{
var worksheet = workbook.Worksheets.Add(sheetname);
worksheet.Cell("A1").Value = sheetname;
}
workbook.SaveAs(stream);
stream.Seek(0, SeekOrigin.Begin);
HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new ByteArrayContent(stream.ToArray());
result.Content.Headers.ContentDisposition = new System.Net.Http.Headers.ContentDispositionHeaderValue("attachment");
result.Content.Headers.ContentType = new System.Net.Http.Headers.MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
result.Content.Headers.ContentDisposition.FileName = "ERSheet.xlsx";
return result;
}
更新
这与这个问题Download file with ClosedXML 不同,因为我提到我已经通过使用'FileStreamResult' 使它工作。我之所以问这个问题是因为这个评论“最好返回带有 StreamContent 的 HttpResponseMessage ”。在此线程Web API Return A File 中制作。因此,尝试在 .Net Core 中使用 HttpResponseMessage 并且不知道它不再支持 Darin 的答案。
【问题讨论】:
-
此 ResponseMessage 没有任何内容。我的意思是Excel文件的内容。还是我不对?
-
对不起,我很困惑。我的 ResponseMessage 不包含任何内容或 HttpResponseMessage 不能用于保存任何内容?
-
首先,您的 JSON 字符串没有 Excel 文件的任何内容
标签: asp.net-web-api asp.net-core