Контроллеры ASP.NET Core MVC. Отправка кодов состояния HTTP 4xx

Отправка кодов состояния HTTP 4xx свидетельствует о том, что произошла ошибка на стороне клиента — ресурс не найден, пользователь не авторизован и т.д. В ASP.NET Core MVC предусмотрен ряд классов, отправляющих клиенту наиболее распространенные коды статуса HTTP группы 4xx.

Классы BadRequestResult и BadRequestObjectResult

Эти классы отправляют клиенту код статуса HTTP 400 Bad Request, свидетельствующий о том, что в запросе допущена синтаксическая ошибка, например, отсутствует необходимый параметр запроса, запрос содержит некорректные данные и т.д. При этом, класса BadRequestObjectResult возможно указание объекта, который может быть отправлен в теле ответа. Для создания этих классов в классе Controller предусмотрены следующие методы:

public virtual BadRequestResult BadRequest();
  • error — объект, содержащий сведения об ошибке
  • modelStateсловарь, содержащий ошибки валидации модели
public virtual BadRequestObjectResult BadRequest(ModelStateDictionary modelState);
public virtual BadRequestObjectResult BadRequest(object? error);

Пример применения в контроллере:

public IActionResult BadRequestOperation(int param)
{
    if (param <= 0)
        return BadRequest(new { Error = "Число должно быть больше 0" });//отправляем код 400
    else
        return Ok();
}

результат:

Классы ConflictResult и ConflictObjectResult

Эти классы генерируют в ответ запросу пользователя код статуса 409 Conflict. Этот статусный код, часто отправляется клиенту на PUT-запрос, например, когда на сервер загружается более старый файл, чем уже есть на сервере. Эти классы создаются при выполнении следующих методов класса Controller:

public virtual ConflictResult Conflict();
  • error — объект, содержащий сведения об ошибке
  • modelStateсловарь, содержащий ошибки валидации модели
public virtual ConflictObjectResult Conflict(object? error);
public virtual ConflictObjectResult Conflict(ModelStateDictionary modelState);

Например,

public IActionResult ConflictOperation(int param)
{
    int value = 5;
    if (param <= value)
        return Conflict(new { Error = $"Значение param должно быть больше {value}" });//отправляем код 409
    else
        return Ok();
}

Класс ForbidResult

Этот класс отправляет клиенту код статуса HTTP 403 Forbidden, который означает, что сервер понял запрос, но он отказывается его выполнять из-за ограничений в доступе для клиента к указанному ресурсу. Обычно этот код статуса могут увидеть пользователи, которые не прошли аутентификацию. Этот класс создается следующими методами класса Controller:

public virtual ForbidResult Forbid();
  • propertiesсловарь, используемый для хранения значений состояния сеанса аутентификации.
  • authenticationSchemes — схемы аутентификации, при использовании которых возникла проблема
public virtual ForbidResult Forbid(AuthenticationProperties properties, params string[] authenticationSchemes);
public virtual ForbidResult Forbid(AuthenticationProperties properties);
public virtual ForbidResult Forbid(params string[] authenticationSchemes);

Работу с этими класса, а также методом Forbid() мы рассмотрим в теме «Аутентификация и авторизация», так как для корректной отправки этого кода статуса требуются дополнительные настройки нашего проекта о которых мы пока ещё ничего не знаем.

Классы NotFoundResult и NotFoundObjectResult

Эти классы отправляют клиенту, наверное, самый популярный статусный код — 404 Not Found, который сообщает о том, что сервер понял запрос, но не нашёл соответствующего ресурса по указанному URL. Для создания этих классов используются следующие методы класса Controller:

public virtual NotFoundObjectResult NotFound (object? value);
  • value— сведения об ошибке
public virtual NotFoundResult NotFound ();

Например,

public IActionResult NonFoundOperation()
{
    return NotFound();
}

 

Классы UnauthorizedResult и UnauthorizedObjectResult

Эти классы отправляют клиенту код статуса HTTP 401 Unauthorized, который свидетельствует о том, что для доступа к запрашиваемому ресурсу требуется авторизация. Классы создаются следующими методами класса Controller:

public virtual UnauthorizedObjectResult Unauthorized(object? value);
  • value— сведения об ошибке
public virtual UnauthorizedResult Unauthorized();

Например,

public IActionResult UnauthorizedOperation(int age)
{
    if (age < 18)
        return Unauthorized(new { Error = "Доступ запрещен. Ограничение 18+"});
    else
        return Ok();
}

Классы UnprocessableEntityResult и UnprocessableEntityObjectResult

Эти классы отправляют клиенту код статуса 422 Unprocessable Entity, который свидетельствует о том, что сервер успешно принял запрос и может работать с указанным видом данных, однако имеется какая-то логическая ошибка, из-за которой невозможно произвести операцию над ресурсом. В основном, такой код HTTP характерен при выполнении операций с базами данных. Объекты этих классов создаются следующими методами класса Controller:

public virtual UnprocessableEntityResult UnprocessableEntity();
  • error — объект, содержащий сведения об ошибке
  • modelState — словарь, содержащий ошибки валидации модели
public virtual UnprocessableEntityObjectResult UnprocessableEntity (ModelStateDictionary modelState);
public virtual UnprocessableEntityObjectResult UnprocessableEntity (object? error);

Например,

public IActionResult UnprocessableEntityOperation(int age)
{
    if (age < 18)
        return UnprocessableEntity(new { Error = "Недопустимое значение"});
    else
        return Ok();
}

Итого

ASP.NET Core MVC предоставляет сразу ряд классов, отправляющих коды состояния HTTP группы 4хх, сообщающих нам о том, что на стороне клиента произошла какая-либо ошибка. При этом, работа метода Forbid() напрямую зависит от настроек сервиса авторизации.

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