Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core 7
Иногда возникает необходимость отправить в ответ на запрос какой-либо статусный код. Например, если пользователь пытается получить доступ к ресурсу, который недоступен или для которого у пользователя нету прав. Либо нам нужно просто уведомить браузер пользователя с помощью статусного кода об успешном выполнении операции, как иногда применяется в ajax-запросах. И фреймворк ASP.NET Core MVC предоставляет множество различных классов, которые можно использовать для отправки статусного кода.
StatusCodeResult позволяет отправить любой статусный код клиенту:
public IActionResult Index() { return StatusCode(401); }
Для создания этого результата используется метод StatusCode(), в который передается отправляемый код статуса.
Подобным образом мы можем послать браузеру любой другой статусный код. Но для отдельных кодов статуса предназначены свои отдельные классы.
NotFoundResult и NotFoundObjectResult посылает код 404, уведомляя браузер о том, что ресурс не найден. Второй класс в дополнении к статусному коду позволяет отправить доплнительную информацию, которая потом отобразится в браузере.
Объекты обоих классов создаются методом NotFound. Для первого класса - это метод без параметров, для второго класса - метод, который в качестве параметра принимает отправляемую информацию. Например, используем NotFoundObjectResult:
public IActionResult Index() { return NotFound("Ресурс в приложении не найден"); }
UnauthorizedResult посылает код 401, уведомляя пользователя, что он не автризован для доступа к ресурсу:
public IActionResult Index(int age) { if (age < 18) return Unauthorized(); return Content("Проверка пройдена"); }
Для создания ответа используется метод Unauthorized().
UnauthorizedObjectResult также посылает код 401, только позволяет добавить в ответ некоторый объект с информацией об ошибке:
public class HomeController : Controller { public IActionResult Index(int age) { if (age < 18) return Unauthorized(new Error { Message = "параметр age содержит недействительное значение" }); return Content("Проверка пройдена"); } } class Error { public string Message { get; set; } }
BadResult и BadObjectResult посылают код 400, что говорит о том, что запрос некорректный. Второй класс в дополнении к статусному коду позволяет отправить доплнительную информацию, которая потом отобразится в браузере.
Эти классы можно применять, например, если в запросе нет каких-то параметров или данные представляют совсем не те типы, которые мы ожидаем получить, и т.д.
Объекты обоих классов создаются методом BadRequest. Для первого класса - это метод без параметров, для второго класса - метод, который в качестве параметра принимает отправляемую информацию:
public IActionResult Index(string s) { if(String.IsNullOrEmpty(s)) return BadRequest("Не указаны параметры запроса"); return View(); }
OkResult и OkObjectResult посылают код 200, уведомляя об успешном выполнении запроса. Второй класс в дополнении к статусному коду позволяет отправить доплнительную информацию, которая потом отобразится в браузере.
Объекты обоих классов создаются методом Ok(). Для первого класса - это метод без параметров, для второго класса - метод, который в качестве параметра принимает отправляемую информацию:
public IActionResult Index() { return Ok("Запрос успешно выполнен"); }