.NET 8
У меня есть промежуточное программное обеспечение, которое читает ответ на запрос:
public async Task InvokeAsync(HttpContext context)
{
var originalBodyStream = context.Response.Body;
using (var responseBody = new MemoryStream())
{
context.Response.Body = responseBody;
await _next(context);
context.Response.Body.Seek(0, SeekOrigin.Begin);
var responseText = await new StreamReader(context.Response.Body).ReadToEndAsync();
context.Response.Body.Seek(0, SeekOrigin.Begin);
Console.WriteLine("Response Body:");
Console.WriteLine(responseText);
await responseBody.CopyToAsync(originalBodyStream);
}
}
И я сделал тестовый контроллер, по функционалу аналогичный реальному корпусу:
[HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[\r\n { \"id\": \"test\",\r\n \"id\": \"test\" } ]";
return Content(s, "application/json; charset=utf-8");
}
Этот контроллер возвращает правильный результат:
Но когда я использую следующую строку, я получаю неверный ответ:
[HttpGet("sample")]
public IActionResult GetSample()
{
var s = "[\r\n {\r\n \"id\": \"test\",\r\n \"tt\": \"213\",\r\n \"nn\": \"33\"\r\n }\r\n]";
return Content(s, "application/json; charset=utf-8");
}
Ответ отображается правильно в Postman
Я создаю основной проект MVC asp.net для проверки вашего кода, но все работает хорошо. Итак, в предоставленном вами коде может быть какая-то проблема. Если проблема не решена, не могли бы вы предоставить мне образец демо-версии, которая может воспроизвести эту проблему?
Я думаю, что проблема с кодировкой вашего текста.
добавьте это в program.cs:
Console.OutputEncoding = System.Text.Encoding.UTF8;
кстати, почему бы просто не использовать этот способ:
[HttpGet]
public IActionResult Test()
{
var arrayResult = new[] { new { a = 1, result = "result" } };
return Ok(arrayResult);
}
или
[HttpGet]
public IActionResult Test()
{
var objectResult = new { a = 1, result = "result" };
return Content(JsonSerializer.Serialize(objectResult));
}
Спасибо всем за отзывы!
Я решил проблему, удалив строку из Program.cs:
app.UseResponseCompression();
Скорее всего, это проблема с кодировкой (настроена ли консоль, которую вы пишете, на использование UTF-8?). Подключите отладчик и проверьте значение
responseText