Контроллеры ASP.NET Core MVC. Отправка текста и JSON

В предыдущей части мы провели обзор, имеющихся в 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);
  • content — строка, которая будет отправлена клиенту
  • contentType — тип MIME содержимого
  • contentEncoding — кодировка содержимого
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);
  • data — объект, который должен быть сериализован в JSON
  • serializerSettings — настройки сериализатора
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

Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии