ApiController返回了CSV字符串的双转义字符串

时间:2019-07-01 15:58:14

标签: c# .net asp.net-web-api .net-core

我正在努力在异步MQ框架中创建CSV报告。

我设置了一个端点,可以准确地返回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 :(得分:0)

您可以在控制器方法上放置一个属性:[Produces(“ text / plain”)]

答案 1 :(得分:0)

因此,发生这种情况是因为API控制器正在尝试对字符串进行序列化,就像它是JSON对象一样。

一种解决方法是使用HttpResponseMessage中的StreamContent将其作为Stream返回:

        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;