контроллер webapi возвращает данные csv - PullRequest
0 голосов
/ 31 мая 2019

У меня код контроллера webapi выглядит следующим образом:

        [HttpPost]
    public HttpResponseMessage DownloadForms(FormCriteria criteria)
    {
        string downloadData = new FormsToCsvHelper(Umbraco, criteria).GetCsv();
        return Request.CreateResponse(HttpStatusCode.OK, downloadData);
    }

Если я посмотрю на данные, возвращенные в отладчике непосредственно перед отправкой обратно, это будет выглядеть так:

Created Date,IP,Form Name,Email address,Message,Full Name

31 /05/2019 10: 43: 08,127.0.0.1, контактная форма - test, test12 @ hotmail.com, test, Ismail Mayat

Если я скопирую и вставлю его в файл и сохраню как csv, он отлично смотрится в Excel.

Однако данные, которые я на самом деле получаю, выглядят так:

"Created 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"

Вся запись установлена, она заключена в кавычки, а перевод строки воспринимается как литерал, поэтому при открытии файла в Excel его всев одной строке.

Существует DelegatingHandler, который запускает, но это для определенного запроса URL, поэтому для этого запроса он ничего не делает.

Кто-нибудь есть идеи, что происходит?

1 Ответ

1 голос
/ 01 июня 2019

WebAPI по умолчанию сериализует значение как JSON, поэтому ваше значение заключено в двойные кавычки.

Чтобы обойти это, вы можете использовать класс StringContent :

return new HttpResponseMessage(statusCode) {
    Content = new StringContent(downloadData, Encoding.UTF8, "text/csv")
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...