Есть ли способ выдать предупреждение, когда для контроллера используется неправильный тип возврата - PullRequest
0 голосов
/ 24 января 2019

Я создаю Web Api с Asp.Net Core 2.2. Я использую swagger для проверки моих конечных точек. Мои модели постоянно развиваются, и когда я реорганизую какой-то метод, чтобы вернуть другой тип, очень легко пропустить изменение этого типа в контроллере как часть ActionResult<T>.

Упрощенный пример:

    [ProducesResponseType(200)]
    [HttpGet]
    public ActionResult<string> Get()
    {
        int myNumber = 1;
        return Ok(myNumber);
    }

Это будет работать нормально, за исключением того, что в swagger будет отображаться неверный тип возврата (если string будет отображаться тип возврата, даже если на самом деле возвращается int). Есть ли способ создать предупреждение для этой ситуации?

РЕДАКТИРОВАТЬ 1: Предоставить более подробный пример:

    public class MyClass
    {
        public Guid ProductId { get; set; }
        public string ProductName { get; set; }
    }

    public class MyOtherClass
    {
        public string UserId { get; set; }
        public string Username { get; set; }
        public DateTime CreationDate { get; set; }
    }

    [ProducesResponseType(200)]
    [HttpGet]
    public ActionResult<MyClass> Get()
    {
        var myOtherClass = new MyOtherClass();
        return Ok(myOtherClass);
    }

Если я запишу следующее в swagger, я получу:

enter image description here

Я не ожидал, что это выдаст ошибку, но предупреждение было бы неплохо.

P.S. идея о том, что может быть предупреждение, возникла из пакета Microsoft.AspNetCore.Mvc.Api.Analyzers, который генерирует предупреждение в следующей ситуации:

    [ProducesResponseType(200)]
    [HttpGet]
    public ActionResult<MyClass> Get()
    {
        return BadRequest();
    }

При сборке я получаю следующее: warning API1000: Action method returns undeclared status code '400'.

1 Ответ

0 голосов
/ 24 января 2019

Swagger сообщает о возвращении как string, потому что это то, что вы говорите ему делать. int фактически приводится к string. Вам просто повезло (не повезло?) Здесь, что это можно сделать с помощью фреймворка. Если вы возвращаете что-то, что не может быть автоматически приведено к типу возвращаемого значения, это вызовет исключение.

Как такового, здесь нет никакого предупреждения. Во всяком случае, я бы просто не возвращал строки по большей части или, по крайней мере, начал бы разработку ваших методов с более жестким типом, таким как bool. Например, вы можете просто заглушить это как:

public ActionResult<bool> MyAwesomeAction()
{
    return Ok(true);
}

Затем создайте свой метод, и когда вы будете готовы сделать реальный возврат, измените true на то, что вы на самом деле возвращаете. Это приведет к синтаксической ошибке, поскольку ваш возвращаемый тип не может быть интерпретирован как bool, что также побуждает вас изменить общий параметр.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...