Swashbuckle.AspNetCore как описать модель реакции на ошибку? - PullRequest
0 голосов
/ 17 мая 2019

У меня ASP.NET Core v2.1 с пакетом Swashbuckle.AspNetCore.

У меня есть следующая модель для ответа об ошибке:

public class ErrorResponse
{
    [JsonProperty(PropertyName = "error")]
    public Error Error { get; set; }
}

public class Error
{
    [JsonProperty(PropertyName = "code")]
    public string Code { get; set; }

    [JsonProperty(PropertyName = "message")]
    public string Message { get; set; }

    [JsonProperty(PropertyName = "target")]
    public string Target { get; set; }

    [JsonProperty(PropertyName = "details")]
    public List<ErrorDetail> Details { get; set; }

    [JsonProperty(PropertyName = "innererror")]
    public InnerError InnerError { get; set; }
}

public class ErrorDetail
{
    [JsonProperty(PropertyName = "code")]
    public string Code { get; set; }

    [JsonProperty(PropertyName = "message")]
    public string Message { get; set; }

    [JsonProperty(PropertyName = "target")]
    public string Target { get; set; }
}

public class InnerError
{
    [JsonProperty(PropertyName = "code")]
    public string Code { get; set; }

    [JsonProperty(PropertyName = "innererror")]
    public InnerError NestedInnerError { get; set; }
}

, например, если что-тоидет не так, моя конечная точка API возвращает объект типа ErrorResponse с соответствующим StatusCode:

        if (String.IsNullOrWhiteSpace(token))
        {
            ErrorResponse errorResponse = new ErrorResponse() { Error = new Error() };
            errorResponse.Error.Code = "InvalidToken";
            errorResponse.Error.Target = "token";
            errorResponse.Error.Message = "Token is not specified";
            return new BadRequestObjectResult(errorResponse);
        }

Как я могу сгенерировать соответствующую документацию, используя Swashbuckle.AspNetCore, поэтому клиент будет знать формат ответа, если что-то пойдет не так?

1 Ответ

1 голос
/ 17 мая 2019

Посмотрите на readme:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore#explicit-responses


Явные ответы

Если вам нужно указать другой код состояния и / или дополнительные ответы, или ваши действия возвращают IActionResult вместо ответа DTO, вы можете описать явные ответы с помощью ProducesResponseTypeAttribute, который поставляется с ASP.NET Core. Например ...

[HttpPost("{id}")]
[ProducesResponseType(typeof(Product), 200)]
[ProducesResponseType(typeof(IDictionary<string, string>), 400)]
[ProducesResponseType(500)]
public IActionResult GetById(int id)

Так что в вашем случае вы должны добавить:
[ProducesResponseType(typeof(ErrorResponse), 400)]
Для тех действий, которые возвращают ошибку, вот хорошее чтение:
https://docs.microsoft.com/en-us/aspnet/core/web-api/advanced/conventions

...