В предыдущей части мы провели обзор, имеющихся в 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


