Как добавить общий заголовок для каждого запроса (Swagger и Swashbuckle)

#c# #.net #swagger #swashbuckle

#c# #.net #swagger #swashbuckle

Вопрос:

Я использую Swashbuckle версии 5.6 и .NET Framework. Но моя авторизация находится на стороне сервера (другой проект веб-API только для авторизации). Я хотел бы предоставить своим пользователям простой способ добавления токена аутентификации для каждого запроса в пользовательском интерфейсе swagger. В настоящее время я могу добавить токен или другие дополнительные заголовки с помощью расширения Chrome, подобного этому, но это, очевидно, не для пользователей. Я предпочитаю иметь все в одном инструменте без расширений Chrome. Есть ли лучший способ?

Обновить

Итак, кажется, я неправильно сформулировал свой вопрос. Я собираюсь исправить это, добавив новые детали. Во-первых, я хотел бы показать, что именно мне нужно. Пожалуйста, посмотрите на экран примера всплывающего окна авторизации swagger: введите описание изображения здесь

Я пытаюсь сделать для этого следующее:

  1. Реализовать IOperationFilter
 public class AuthorizationHeaderParameterOperationFilter : IOperationFilter
{
    public void Apply(Operation operation, SchemaRegistry schemaRegistry, ApiDescription apiDescription)
    {
        if (operation.security == null)
        {
            operation.security = new List<IDictionary<string, IEnumerable<string>>>();
        }

        var test = new Dictionary<string, IEnumerable<string>>();
        test.Add("test", new List<string>
        {
            "field1",
        });
        operation.security.Add(test);
    }
}
 
  1. добавьте это в мою конфигурацию swagger:
 public static void Register()
{
    GlobalConfiguration.Configuration
        .EnableSwagger(c =>
        {
       
            c.RootUrl(ResolveBasePath);
            c.PrettyPrint();
            c.IgnoreObsoleteActions();
            c.UseFullTypeNameInSchemaIds();
            c.DescribeAllEnumsAsStrings();
            c.OperationFilter<AuthorizationHeaderParameterOperationFilter>();
            c.ResolveConflictingActions(apiDescriptions => apiDescriptions.First());
        })
        .EnableSwaggerUi(c =>
        {              
            c.DocExpansion(DocExpansion.None);
        });
}
 

В результате я вижу изменения, но это что-то странное. Да, я вижу появившийся знак авторизации:

введите описание изображения здесь

Но если я щелкну по нему, я увижу это пустое окно:

введите описание изображения здесь

Я совершенно не понимаю, как настройки

 var test = new Dictionary<string, IEnumerable<string>>();
        test.Add("test", new List<string>
        {
            "field1",
        });
        operation.security.Add(test);
 

привязаны к окну. Пожалуйста, помогите.

Комментарии:

1.В пользовательском интерфейсе Swagger есть место для авторизации, см. Кнопку Авторизации в этих примерах: swagger-net-test.azurewebsites.net/swagger/ui/index offleaseonly.azurewebsites.net/swagger/ui/index

2. Вот статья: Swagger — схема безопасности для защищенных API , в которой рассказывается о том, как разрешить пользователю использовать токен на предъявителя или базовую аутентификацию в пользовательском интерфейсе Swagger. Хотя его на ASP.NET Ядро, это должно быть таким же образом в .NET framework.