ApiController возвращает строку с двойным экранированием для строки CSV - PullRequest
0 голосов
/ 01 июля 2019

Я работаю над созданием отчета CSV в асинхронной среде MQ.

У меня настроена конечная точка, которая точно возвращает результаты CSV, то есть:

Column 1, Column2, Column 3\r\nValue 1, Value 2, Value 3

Однако, как только это сообщение сериализуется и отправляется в качестве ответа, каждыйрезультат с двойным экранированием, т. е.

\"Column 1, Column 2, Column 3\\r\\nValue 1, Value 2, Value 3\"

..., который выполняет синтаксический анализ результата с буквенными кавычками и символами новой строки, что, очевидно, не является допустимым форматом для CSV.

Я пробовал string.Trim('"') и Regex.Unescape() на возвращаемом значении, прежде чем возвращать ApiController.Ok(value), но это сериализация в самом методе OK, которая избегает символов.Я не могу удалить их на стороне извлечения, потому что фреймворк также обрабатывает HTML и PDF и должен быть независим от формата возвращаемой строки - плюс, эта конечная точка будет использоваться в большем количестве мест и должна возвращать неэкранированную строку.

Есть идеи как это предотвратить?

Ответы [ 2 ]

0 голосов
/ 02 июля 2019

Итак, это происходило потому, что контроллер API пытался сериализовать строку, как будто это объект JSON.

Одним из способов решения этой проблемы было просто вернуть его в виде потока, используя StreamContent в HttpResponseMessage:

        string content = GetCsvStuffFromSomewhere();

        var stream = new MemoryStream(Encoding.UTF8.GetBytes(content));

        var response = new HttpResponseMessage
        {
            StatusCode = System.Net.HttpStatusCode.OK,
            Content = new StreamContent(stream)
        };

        response.Content.Headers.ContentType = new MediaTypeHeaderValue("text/csv");

        return response;
0 голосов
/ 02 июля 2019

Вы можете поместить атрибут в метод вашего контроллера: [Produces ("text / plain")]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...