Web API MVC5, использующий Swagger, не будет вызывать API со словами «Попробуйте!» с заголовками - PullRequest
3 голосов
/ 04 августа 2020
  • Я настроил пользовательский интерфейс Swagger в своем веб-API MVC5. Для тестирования API swagger работает нормально, пока я не добавлю некоторые параметры заголовка.
  • API создаются таким образом, что поля имени пользователя и пароля находятся в заголовках, а все остальные данные берутся в теле.
  • Заголовки добавляются IOperationFilter, как предлагается в Web Api. Как добавить параметр заголовка для всех API в Swagger и OperationFilter добавляется в SwaggerConfig.cs как: c.OperationFilter<AddHeaderParameters>();
    public class AddHeaderParameters : IOperationFilter
    {
        public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
        {
            if (operation.parameters == null)
                operation.parameters = new List<Parameter>();
    
            operation.parameters.Add(new Parameter
            {
                name = "Account Username",
                @in = "header",
                type = "string",
                required = true,
            });
            operation.parameters.Add(new Parameter
            {
                name = "Account Password",
                @in = "header",
                type = "string",
                required = true,
            });
        }
    }
    

Пользовательский интерфейс Swagger с заголовками введите описание изображения здесь

Требуется помощь в том, что я пропустил или что-то сделано не так.

1 Ответ

1 голос
/ 05 августа 2020

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

Когда я создавал класс AddHeaderParameters для получения заголовков в пользовательском интерфейсе swagger, я дал самоопределение имени заголовка (это было фактической причиной проблемы). Имя заголовка должно соответствовать фактическому имени заголовка.

В моем случае, например, имя заголовка было AccountUserName, которое я использовал в заголовке swagger с указанием места как Account Username.

Правильно путь

operation.parameters.Add(new Parameter
{
    name = "AccountUserName",
    @in = "header",
    type = "string",
    required = true,
});
...