Swagger - Наследование контроллера - PullRequest
0 голосов
/ 26 марта 2019
[ApiVersion(ApiControllerVersion.Version1)]
public class PaymentControllerV1
{
    [HttpPost]
    [Produces("application/json")]
    [SwaggerOperation("POST: make payment")]
    [Route("payments/")]
    public async Task<IActionResult> PostPayment([FromBody] PaymentRequestDto paymentRequest)
    {
    }

    [HttpGet]
    [Produces("application/json")]
    [SwaggerOperation("GET: get payment by id")]
    [Route("payments/{paymentId}")]
    public virtual async Task<IActionResult> GetPayment([FromRoute] int paymentId)
    {
    }
}

[ApiVersion(ApiControllerVersion.Version2)]
public class PaymentControllerV2: PaymentControllerV1
{
    [HttpPost]
    [Produces("application/json")]
    [SwaggerOperation("POST: make payment")]
    [Route("payments/")]
    public override async Task<IActionResult> PostPayment([FromBody] PaymentRequestV2Dto paymentRequest)
    {
    }
}

Во втором случае мы обновили запросы еще несколькими полями для POST PaymentRequestV2Dto.

Теперь, чтобы избежать избыточного кода, мы наследуем PaymentControllerV1.

Если я запускаю приложение и пытаюсь загрузить swagger для V1, он работает, но для V2 - ошибка 500.

Если я получаю вызов от POSTMAN для v2, он работает нормально.

Как устранить ошибку чванства?

...