Пометить параметр метода WebApi как устаревший / устаревший для Swashbuckle / Swagger - PullRequest
0 голосов
/ 14 февраля 2020

Согласно моему пониманию Swagger Specification , можно пометить параметр как устаревший:

Устаревшие параметры

Используйте deprecated: true, чтобы отметить параметр как устаревший.

        - in: query
          name: format
          required: true
          schema:
            type: string
            enum: [json, xml, yaml]
          deprecated: true
          description: Deprecated, use the appropriate `Accept` header instead.```

Как можно заставить Swashbuckle генерировать это для параметра?

Почему?

У меня есть метод контроллера, похожий на следующее:

[HttpGet]
public async Task<IActionResult> Execute(bool? someName)
{
}

И я хочу изменить имя параметра строки запроса, временно оставаясь обратно совместимым, поэтому я хочу сделать что-то вроде:

[HttpGet]
public async Task<IActionResult> Execute([Obsolete("Use someNewName instead.")] bool? someName, bool? someNewName)
{
    someNewName = someNewName ?? someName;
}

Однако Obsolete не может быть применяется к параметру. Я ожидал, что Swashbuckle.AspNetCore.Annotations может быть местом, где можно найти такую ​​функциональность, но, похоже, его нет.

1 Ответ

1 голос
/ 14 февраля 2020

Вы не помечаете параметр как устаревший, если параметр устарел, весь метод устаревает. Вам нужно будет объявить новый метод с новой сигнатурой метода и пометить старый метод как устаревший. Примерно так:

[HttpGet]
[Obsolete("Use Execute with bool? someNewName instead.")]
public async Task<IActionResult> Execute(bool? someName)
{
}

[HttpGet]
public async Task<IActionResult> Execute(bool? someNewName)
{
}

Если вы изменили только имя параметра, вместо этого вы можете использовать атрибут Bind для привязки элемента URI к переменной с другим именем, например:

[HttpGet]
public async Task<IActionResult> Execute([Bind(Prefix = "someNewName")] bool? someName)
{
}

Это позволит вам продолжать использовать тот же метод, без необходимости принудительного изменения всех ваших клиентов. Но если изменилось не только имя параметра, например, типа, вам потребуется новый метод

...