我正在努力在异步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,并且必须与返回的字符串的格式无关-此外,此端点将在更多地方使用,并且应返回未转义的字符串
关于如何防止这种情况的任何想法?
答案 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;