我有一个对象列表,我想通过Web Api下载为csv文件。但是当我用Swagger测试时,我没有下载csv。我究竟做错了什么? DailyReportContent包含2个对象。
到目前为止这是我的代码:
public IActionResult GetDailyReport(DateTime invoiceDate)
{
var dailyReportContent = new List<DailyReportModel>().....
// create csv file
var engine = new FileHelperEngine<DailyReportModel>
{
HeaderText = "headers.."
};
using (var stream = new MemoryStream())
using (var streamWriter = new StreamWriter(stream))
{
engine.WriteStream(streamWriter, dailyReportContent);
var result = new HttpResponseMessage(HttpStatusCode.OK);
result.Content = new StreamContent(stream);
result.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");
result.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment") { FileName = "DailyReports.csv" };
return Ok(result);
}
}
这是Swagger的回应:
{
"version": {
"major": 1,
"minor": 1,
"build": -1,
"revision": -1,
"majorRevision": -1,
"minorRevision": -1
},
"content": {
"headers": [
{
"key": "Content-Type",
"value": [
"text/csv"
]
},
{
"key": "Content-Disposition",
"value": [
"attachment; filename=DailyReports.csv"
]
}
]
},
"statusCode": 200,
"reasonPhrase": "OK",
"headers": [],
"requestMessage": null,
"isSuccessStatusCode": true
}
编辑:即使我添加这个:
stream.Flush();
streamWriter.Flush();
var reader = new StreamReader(stream);
var readResult = reader.ReadToEnd();
readResult是空的。所以我想在编写流时会出现问题?
我想你需要
return result;
返回“Ok(<object>)”将返回包含该对象的响应消息。 您已经创建了响应消息并指定了所有内容。 所以我认为你正在返回一个OK响应,包含另一个OK响应消息。
修正如下:
var csvContent = LoadcsvContent();
var engine = new FileHelperEngine<DailyReportModel>
{
HeaderText = "......."
};
var stream = new MemoryStream();
TextWriter streamWriter = new StreamWriter(stream);
engine.WriteStream(streamWriter, csvContent);
streamWriter.Flush();
stream.Seek(0, SeekOrigin.Begin);
return File(await stream, "text/csv", $"Report_{invoiceDate:yyyyMMdd}.csv");
现在就像一个魅力。 Swagger输出:
在ASP.Net Core中我们有qazxsw poi
返回我们需要的类型的文件,在我的情况下为.msi包我使用return File(ret, "application/octet-stream", fileName);
你可以在控制器级别指定返回类型为.CSV或在"application/octet-stream"
类的WebApiConfig
类中指定返回类型