Предотвращение фрагментации в веб-API ASP.NET Core 6C#

Место общения программистов C#
Anonymous
Предотвращение фрагментации в веб-API ASP.NET Core 6

Сообщение Anonymous »

У меня есть простой веб-API ASP.NET Core 6. Я получаю запрос POST и отправляю обратно ответ JSON в теле.
В более новых версиях я могу использовать:

Код: Выделить всё

var updatedJsonObject = JsonConvert.SerializeObject(status, new JsonSerializerSettings
{
ContractResolver = new CamelCasePropertyNamesContractResolver()
});
string response = updatedJsonObject.ToString();
return Results.Text(response, "application/json");
И он правильно устанавливает заголовок Content-Length и не отправляет обратно фрагментированный ответ. Я могу вручную установить заголовок Content-Length, но он всегда будет неправильным, поскольку система .NET автоматически добавляет его в тело ответа:

Код: Выделить всё

"contentType":"application/json","statusCode":null
Итак, по сути, мой объект JSON оборачивается оболочкой и добавляется его собственные свойства.
Вот что я должен получить:

Код: Выделить всё

{\"status\":\"OK\"}
Но вот что я на самом деле получаю:

Код: Выделить всё

{"content":"{\"status\":\"OK\"}","contentType":"application/json","statusCode":null}
Два вопроса:
  • Как я могу вернуть необработанную строку JSON, которая уже была создана в качестве тела, без каких-либо дополнений из .NET?
  • Как я могу запретить API отправлять фрагментированный ответ?
У меня это отлично работает в проекте ASP.NET Core 6, но я пытаюсь обновить устаревший проект, который использует .NET 6, и я не могу его обновить.
Веб-API использует Kestrel с подписью:

Код: Выделить всё

[HttpPost]
public async Task Post()
Я пробовал использоватьResults.Content,Results.Ok,Results.Json и т. д. Все они заключают тело ответа в свои собственные свойства JSON.
Это кажется такой простой вещью, но сводит меня с ума. Любая помощь будет принята с благодарностью.

Вернуться в «C#»