В предыдущей части мы провели обзор, имеющихся в ASP.NET Core MVC классов, реализующих интерфейс IActionResult
, а также методов контроллера с помощью которых мы можем формировать ответ клиенту. В этой и последующих частях мы рассмотрим работу тех или иных методов контроллера и их применение в приложениях ASP.NET Core MVC. Начнем с того, что разберемся каким образом в ASP.NET Core осуществляется отправка текста и JSON клиенту.
Класс ContentResult и метод Content
За отправку клиенту текстового содержимого в ASP.NET Core отвечает класс ContentResult
, объект которого можно создать, вызвав метод Content()
контроллера.
Для метода Content()
имеется ряд перегруженных версий:
public virtual ContentResult Content (string content); |
|
public virtual ContentResult Content (string content, MediaTypeHeaderValue? contentType); |
|
public virtual ContentResult Content (string content, string contentType); |
|
public virtual ContentResult Content (string content, string contentType, Encoding contentEncoding); |
Создадим новый проект ASP.NET Core MVC и определим следующее действие в контроллере HomeController
:
public IActionResult Index() { return Content("Текстовое содержимое"); }
Результатом выполнения этого действия будет обычный текст в браузере
если мы хотим отправить HTML-код, то можно воспользоваться, например, такой версией метода Content()
:
public IActionResult Index() { return Content("<h1>HTML-код</h1>", "text/html; charset=utf-8"); }
Если вдруг, по каким-то причинам мы не можем использовать методы Content()
контроллера, то ничего нам не мешает создать объект класса ContentResult
самостоятельно:
public IActionResult Index() { var content = new ContentResult { StatusCode = 200, Content = "<h1>HTML-код</h1>", ContentType = "text/html; charset=utf-8" }; return content; }
Как видите, при создании объекта ContentResult
вручную мы также можем задать и код статуса, который будет использован при отправке ответа клиенту.
Класс JsonResult и метод Json
Для отправки клиенту ответа в формате JSON используется класс JsonResult
и метод контроллера Json()
, который имеет следующие перегрузки:
public virtual JsonResult Json (object? data); |
|
public virtual JsonResult Json (object? data, object? serializerSettings); |
Например, создадим следующее действие в контроллере
public IActionResult Index() { var obj = new { name = "John", Age = 15 }; return Json(obj); }
Результат выполнения
При необходимости задать настройки сериализатора, мы можем воспользоваться второй версией метода Json()
:
public IActionResult Index() { var obj = new { name = "John", Age = 15 }; return Json(obj, new JsonSerializerOptions() { AllowTrailingCommas = true, IgnoreReadOnlyFields = true, PropertyNameCaseInsensitive = true, }); }
Информацию о настройках сериализатора можно посмотреть в этом разделе.
Если необходимо вручную создавать объект типа JsonResult
, то можно это сделать следующим образом:
public IActionResult Index() { var obj = new { name = "John", Age = 15 }; return new JsonResult(obj, new JsonSerializerOptions() { AllowTrailingCommas = true, IgnoreReadOnlyFields = true, PropertyNameCaseInsensitive = true, }); }
Итого
Для отправки текста клиенту мы можем либо воспользоваться методом контроллера Content()
, либо вручную создавать объект ContentResult
и передавать его в результате выполнения действия. Для отправки JSON используется метод контроллера Json()
, который создает объект JsonResult. Для настройки сериализатора мы можем передавать в метод или конструктор класса JsonResult
в качестве второго параметра объект класса JsonSerializerOptions