Web API 2-Excel电子表格(文件已损坏,无法打开)

时间:2019-02-07 14:32:01

标签: c# excel asp.net-web-api2 memorystream

我正在尝试使用Web API下载一个简单的xlsx文件,但该文件始终已损坏,我还没有找出原因。我正在使用C#ClosedXML.Excel并遵循一个基本示例,该示例可以在此处找到: >

ClosedXml examples

[HttpGet]
[Route("campaigns/{id}/contact-points/excel")]
[SwaggerResponse(491, "TokenInvalid")]
[SwaggerResponse(HttpStatusCode.NotFound)]
[SwaggerResponse(HttpStatusCode.Forbidden)]
[ResponseType(typeof(HttpResponseMessage))]
public async Task<IHttpActionResult> GetCampaignContactPointsExcel(int id, int frequency, string txtFrequency)
{
    var wb = new XLWorkbook();
    var ws1 = wb.Worksheets.Add("Sheet1");
    ws1.Cell("A1").SetValue(1).AddToNamed("value1");

    var ws2 = wb.Worksheets.Add("Sheet2");

    ws2.Cell("A1").SetFormulaA1("=value1").AddToNamed("value2");

    var responseMessage = new HttpResponseMessage(HttpStatusCode.OK);
    using (var memoryStream = new MemoryStream())
    {
            wb.SaveAs(memoryStream);
            responseMessage.Content = new ByteArrayContent(memoryStream.ToArray());
            responseMessage.Content.Headers.ContentType = new MediaTypeHeaderValue("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
            responseMessage.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
                {
                    FileName = "ContactPoints.xlsx"
                };
                memoryStream.Close();
            }
            return ResponseMessage(responseMessage);
    }

我也在使用摇摇欲坠,当我单击链接时,它会下载文件并将其打开为xlsx文件,但始终表示文件已损坏。

3 个答案:

答案 0 :(得分:0)

后端代码没有错。在前端,您需要设置responseType ='blob'

答案 1 :(得分:0)

似乎是与swagger ui 2相关的问题。请参考[https://github.com/swagger-api/swagger-ui/issues/1605] [1]。

您可以尝试使用curl或Postman来查看文件是否正确下载。

答案 2 :(得分:0)

同时调用服务集响应类型为'blob'

return this.http.get(this.url +'PA/Downloadexcel/'+revisionId,{ responseType :'blob'});

相关问题