Как исключить свойство из документации Swagger на определенных конечных точках - PullRequest
0 голосов
/ 12 октября 2018

Я являюсь частью большого проекта C # API, и у нас возникают проблемы с клиентами, которые перепутаны из-за ненужных свойств, показанных в нашей документации Swagger (мы используем Swashbuckle для его генерации)

В простейшем виде, все сводится к следующему:

  • У нас есть простой класс с идентификатором и свойством Description.

  • На POST мыне требуется, чтобы ID был отправлен (будет автоматически сгенерирован).Но в GET и других глаголах идентификатор требуется возвращать / отправлять

Мы хотели бы использовать одну и ту же модель для всех этих конечных точек (для простоты), но исключитьИдентификатор из документации запроса POST

Было бы замечательно, если бы он был исключен конечной точкой, а не глаголом - так как я уверен, что мы столкнемся с некоторым сценарием, где он не специфичен для глагола.

1 Ответ

0 голосов
/ 12 октября 2018

Я обычно использую совершенно разные модели, так как я обычно следую шаблону CQRS, поэтому то, что я запрашиваю в GET, не очень похоже на то, когда я посылаю команду через POST или PUT, но я думаю, вы могли бы сделатьчто-то вроде этого:

public class AddUpdateAddressType
{
    [Required]
    [StringLength(50, MinimumLength = 2)]
    public string Name { get; set; }

    public string Description { get; set; }
}

public class AddressType : AddUpdateAddressType {

    [JsonProperty(Order = -10)]
    public int Id { get; set; }

    [JsonProperty(Order = 98)]
    [DataType(DataType.DateTime)]
    public DateTime CreatedOn { get; set; }

    [JsonProperty(Order = 99)]
    [DataType(DataType.DateTime)]
    public DateTime ModifiedOn { get; set; }

}

Тогда в действиях вашего контроллера метод GET украшен

    [HttpGet("{id:int}")]
    public async Task<IActionResult> Get(int id)
    {
         // fetch and return Address
    }

, и ваши методы POST (или PUT) могут выглядеть примерно так

    [HttpPost]
    public async Task<IActionResult> Add(AddAddressType addressType)
    {
        // save AddAddress and return whatever
    }

Надеюсь, это поможет.

...