ContentResult отправляет клиенту ответ в виде строки. Так, следующий пример:
public string Index() { return "Hello METANIT.COM"; }
Можно переписать с использованием ContentResult:
public IActionResult Index() { return Content("Hello METANIT.COM"); }
Для отправки ContentResult не надо использовать конструктор, так как в контроллере уже определен специальный метод Content(), который принимает отправляемую строку и создает объект ContentResult.
Одним из наиболее популярных в наше время форматов хранения и передачи данных является формат JSON (JavaScript Object Notation). JSON не зависит от языка программирования, он более удобен и легче обрабатывается.
В JSON каждый отдельный объект заключается в фигурные скобки и представляет собой набор пар ключ-значение, разделенных запятыми, где ключом является
название свойства объекта, а значением соответственно значение этого свойства. Например: {"name":"Tom"}
. Здесь "name" является ключом, а "Tom" - значением.
Для отправки объекта в формате json в контроллере имеется метод Json(object obj), который в качестве параметра принимает отправляемый объект. Например:
public JsonResult GetName() { return Json("Tom"); }
В данном случае на сторону клиента отправляется строка "Tom".
Допустим, у нас есть следующий класс User:
record class Person(string Name, int Age);
И тогда для отправки клиенту объекта Person мы можем написать следующий метод:
public IActionResult Index() { Person tom = new Person("Tom", 37); return Json(tom); }
При обращении к методу веб-браузер выведет полное описание объекта в формате json:
Дополнительная версия метода Json() в качестве второго параметра принимает объект, который задает настройки сериализации в формат json. В качестве такого объекта выступает объект типа JsonSerializerOptions:
using Microsoft.AspNetCore.Mvc; namespace MvcApp.Controllers { public class HomeController : Controller { public IActionResult Index() { var tom = new Person("Tom", 37); var jsonOptions = new System.Text.Json.JsonSerializerOptions { PropertyNameCaseInsensitive = true, // не учитываем регистр WriteIndented = true // отступы для красоты }; return Json(tom, jsonOptions); } } record class Person(string Name, int Age); }
В данном случае объект JsonSerializerOptions задает с помощью свойств параметры сериализации в json. В частности, значение свойства PropertyNameCaseInsensitive = true
говорит, что регистр названий свойств не учитывается. А свойство WriteIndented = true
задает установку отступов перед свойствами для более форматированного вывода: