Используя ProducesResponseTypeAttribute
, приписываемый API фактически определяет, каким должен быть код ответа для указанных типов. Смотрите определение
из в ProducesResponseTypeAttribute .
Как это работает
Возьмем следующий пример, который показывает, что API выдает ошибку 404, если объект имеет значение null:
public IActionResult GetById(string id)
{
var post = <<Your logic here>>;
if (post == null)
{
return NotFound();
}
return Json(post);
}
Теперь тот же метод можно изменить на следующий, который будет возвращать 404 с использованием ProducesResponseType
вместо того, чтобы код записывался в логике API.
[ProducesResponseType((int)HttpStatusCode.NotFound)]
public IActionResult GetPostById(string id)
{
var post = <<Your logic here>>;
return Json(post);
}
В некоторых случаях может быть целесообразно определить более явный тип ответа для успешных вызовов. Для этого добавьте ProducesResponseTypeAttribute
для кода состояния с типом. (возвращает тип в качестве параметра, что делает свойство Type для Produces избыточным).
Это полезно, если вы хотите вернуть разные вещи из одного и того же метода, например, следующее возвращает два разных типа в зависимости от возвращенного кода состояния:
[ProducesResponseType((int)HttpStatusCode.NotFound)]
[ProducesResponseType(typeof(Model), (int)HttpStatusCode.OK)]
public IActionResult GetById(string id)
В чем ваша проблема
Теперь, если вы видите свой код, который определяет этот атрибут как [ProducesResponseType(typeof(BaseResponseModel<List<UserResource>>), 200)]
. И код для загрузки пользователя:
var user = await _userService.GetUserResourcesAsync();
возвращает BaseResponseModel<T>
. BaseResponseModel должен содержать свойство Code
и Message
. Итак, здесь ответ, возвращаемый API, имеет тип BaseResponseModel<T>
, поэтому API вернет 200 HTTP Status, как определено атрибутом.
Как исправить
Либо вы возвращаете другой объект в случае исключения Unauthorize
и присоединяете ProducesResponseType
, специфичные для этого типа, ИЛИ обрабатываете неаторизованную логику на основе атрибута Authorize
.