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

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

Сообщение Anonymous »

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

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

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 8, но я пытаюсь обновить устаревший проект, использующий .NET 6, и не могу его обновить.
Веб-API использует Kestrel с подпись:

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

[HttpPost]
public async Task Post()
Я пробовал использовать Results.Content,Results.Ok,Results.Json и т. д. Все они оборачивают тело ответа в свои собственные свойства JSON.
Причина, по которой я не могу использовать фрагментирование, заключается в том, что взаимодействующие устройства представляют собой встроенные системы с ограниченными ресурсами. У них нет такой роскоши, как код .net. Они написаны на C. Они полагаются на Content-Length для полной обработки ответа от сервера. При фрагментированном кодировании устройства не могут обработать ответ, поскольку Content-Length не определен. Обратная косая черта взята из копирования/вставки из Postman. Нет необходимости в потоковой передаче; сообщения очень малы.
Рабочий проект, использующий .NET 8, не отправляет результаты в виде фрагментов и имеет правильную длину содержимого. Просто пытаюсь добиться такого же поведения в этой версии .NET 6.

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