Подтвердить что ты не робот

Как создать ответное сообщение и добавить в него строку содержимого в ASP.NET 5/MVC 6

В web-api 2 мы использовали это, чтобы получить ответ со строковым содержимым:

var response = Request.CreateResponse(HttpStatusCode.Ok);
response.Content = new StringContent("<my json result>", Encoding.UTF8, "application/json");

Как вы можете добиться того же в ASP.NET 5/MVC 6 без использования каких-либо встроенных классов, таких как ObjectResult?

4b9b3361

Ответ 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.