Запретить фрагментирование из .net веб-APIC#

Место общения программистов C#
Anonymous
Запретить фрагментирование из .net веб-API

Сообщение Anonymous »

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

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

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

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