Я пытаюсь настроить Swagger для нашего API с помощью Swashbuckle. Каждый из наших контроллеров наследуется от BaseController, который имеет около 8 параметров (userId, язык, платформа и т. д.). У каждого из них есть переменные только для чтения, а их функция get настроена на чтение значения из извлеченных заголовков. Пример:
protected int UserID
{
get
{
return int.Parse(HttpContext.Current.Request.Headers["user_Id"]);
}
}
Когда я впервые установил Swagger, он давал только варианты для передачи параметров, перечисленных в методе. Эти параметры всегда исключают ~8 параметров, установленных в BaseController, поэтому, если контроллер использует идентификатор пользователя, идентификатор пользователя не указан в сигнатуре метода. В качестве идентификатора пользователя не будет отображаться в пользовательском интерфейсе, созданном Swagger.
Прямо сейчас я экспериментировал с атрибутом SwaggerOperation следующим образом:
[SwaggerOperation("UserValidate(UserID)")]
public int UserValidate()
{
return this._UserValidateService.UserValidate(this.UserID);
И у меня есть собственный параметр swagger, который проверяет все методы, если их имя SwaggerOperation содержит «UserID», и если это так, добавьте заголовок UserID к этому вызову.
Моя проблема с этим заключается в том, что мне приходится вручную проходить каждый вызов и добавлять операцию swagger, и если вызов когда-либо изменится, мы должны помнить также об изменении SwaggerOperation.
Я также подумал о том, чтобы просто добавить 8 к каждому вызову API и пометить их как необязательные, но похоже, что это ужасно раздует пользовательский интерфейс.
Посоветуйте пожалуйста по ситуации. Есть ли варианты, которые я не рассмотрел? Это функциональные возможности Swashbuckle, которые я пропустил, которые решат мои проблемы?
Заранее спасибо.