Нередко возникает необходимость отправить в ответ на запрос какой-либо статусный код. Например, если пользователь пытается получить доступ к ресурсу, который недоступен, или для которого у пользователя нету прав. Либо если просто нужно уведомить браузер пользователя с помощью статусного кода об успешном выполнении операции, как иногда применяется в ajax-запросах. Для этого в ASP.NET Core MVC определена богатая палитра классов, которые можно использовать для отправки статусного кода.
StatusCodeResult позволяет отправить любой статусный код клиенту:
public IActionResult Index() { return StatusCode(401); }
Для создания этого результата используется метод StatusCode(), в который передается отправляемый код статуса.
Подобным образом мы можем послать браузеру любой другой статусный код. Но для отдельных кодов статуса предназначены свои отдельные классы.
NotFoundResult и NotFoundObjectResult посылает код 404, уведомляя браузер о том, что ресурс не найден. Второй класс в дополнении к статусному коду позволяет отправить доплнительную информацию, которая потом отобразится в браузере.
Объекты обоих классов создаются методом NotFound. Для первого класса - это метод без параметров, для второго класса - метод, который в качестве параметра принимает отправляемую информацию. Например, используем NotFoundObjectResult:
public IActionResult Index() { return NotFound("Resource not found"); }
UnauthorizedResult посылает код 401, уведомляя пользователя, что он не автризован для доступа к ресурсу:
public IActionResult Index(int age) { if (age < 18) return Unauthorized(); return Content("Access is available"); }
Для создания ответа используется метод Unauthorized().
UnauthorizedObjectResult также посылает код 401, только позволяет добавить в ответ некоторый объект с информацией об ошибке:
public class HomeController : Controller { public IActionResult Index(int age) { if (age < 18) return Unauthorized(new Error("Access is denied")); return Content("Access is available"); } } record class Error(string Message);
BadResult и BadObjectResult посылают код 400, что говорит о том, что запрос некорректный. Второй класс в дополнении к статусному коду позволяет отправить доплнительную информацию, которая потом отобразится в браузере.
Эти классы можно применять, например, если в запросе нет каких-то параметров или данные представляют совсем не те типы, которые мы ожидаем получить, и т.д.
Объекты обоих классов создаются методом BadRequest. Для первого класса - это метод без параметров, для второго класса - метод, который в качестве параметра принимает отправляемую информацию:
public IActionResult Index(string? name) { if (string.IsNullOrEmpty(name)) return BadRequest("Name undefined"); return Content($"Name: {name}"); }
OkResult и OkObjectResult посылают код 200, уведомляя об успешном выполнении запроса. Второй класс в дополнении к статусному коду позволяет отправить дополнительную информацию, которая потом отправляется клиенту в формате json.
Объекты обоих классов создаются методом Ok(). Для первого класса - это метод без параметров, для второго класса - метод, который в качестве параметра принимает отправляемую информацию:
public IActionResult Index() { return Ok("Don't worry. Be happy"); }