webapi控制器返回csv数据

Ism*_*ail 1 asp.net-web-api

我有一个 webapi 控制器代码如下:

\n\n
        [HttpPost]\n    public HttpResponseMessage DownloadForms(FormCriteria criteria)\n    {\n        string downloadData = new FormsToCsvHelper(Umbraco, criteria).GetCsv();\n        return Request.CreateResponse(HttpStatusCode.OK, downloadData);\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果我在发送回调试器之前查看调试器中返回的数据,它看起来像:

\n\n
Created Date,IP,Form Name,Email address,Message,Full Name\n
Run Code Online (Sandbox Code Playgroud)\n\n

31/05/2019 10:43:08,127.0.0.1,联系表 - 测试,test12@hotmail.com,测试,Ismail Mayat

\n\n

如果我将其复制并粘贴到文件中并另存为 csv,它在 Excel 中看起来很好。

\n\n

然而我实际得到的数据看起来像:

\n\n
"\xef\xbb\xbfCreated Date,IP,Form Name,Email address,Message,Full Name\\r\\n31/05/2019 10:43:08,127.0.0.1,Contact form - test,test12@hotmail.com,test,Ismail Mayat"\n
Run Code Online (Sandbox Code Playgroud)\n\n

整个记录集用引号括起来,换行符被视为文字,因此在 Excel 中打开文件时,所有记录都在一行中。

\n\n

有一个 DelegatingHandler 会触发,但那是针对特定的 url 请求,因此对于该请求它不会执行任何操作。

\n\n

有人知道发生了什么事吗?

\n

小智 5

默认情况下,WebAPI 会将值序列化为 JSON,因此这就是您的值用双引号引起来的原因。

为了解决这个问题,您可以使用StringContent类:

return new HttpResponseMessage(statusCode) {
    Content = new StringContent(downloadData, Encoding.UTF8, "text/csv")
};
Run Code Online (Sandbox Code Playgroud)