Ответ 1
Вы можете напрямую записывать в поток Response.Body
(поскольку Body
является простым старым System.IO.Stream
) и вручную задавать тип содержимого:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
byte[] data = Encoding.UTF8.GetBytes(jsonString);
Response.ContentType = "application/json";
await Response.Body.WriteAsync(data, 0, data.Length);
}
Вы можете сэкономить некоторые проблемы, используя некоторые утилиты от Microsoft.AspNet.Http
:
- Метод расширения
WriteAsync
для записи содержимого строки в тело ответа. - Класс
MediaTypeHeaderValue
для указания заголовка типа содержимого. (Он выполняет некоторые проверки и имеет API для добавления дополнительных параметров, таких как кодировка).
Итак, одно и то же действие будет выглядеть так:
public async Task ContentAction()
{
var jsonString = "{\"foo\":1,\"bar\":false}";
Response.ContentType = new MediaTypeHeaderValue("application/json").ToString();
await Response.WriteAsync(jsonString, Encoding.UTF8);
}
В случае сомнений вы всегда можете взглянуть на реализацию ContentResult
и/или JsonResult
.