Добавление глобального элемента в swagger.json при использовании Swashbuckle

#asp.net-core #swashbuckle

#asp.net-core #swashbuckle

Вопрос:

Я использую Swashbuckle для создания файла swagger, который затем загружаю в конечные точки Google.

Конечные точки Google требуют этих двух параметров (хост и x-google-backend)

 "host": "XXXX-ax7nuhuyua-uc.a.run.app",
"x-google-backend": {
    "address": "https://YYYY-dev-ax7nuhuyua-uc.a.run.app",
    "protocol": "h2"
},
 

Они должны быть добавлены на том же уровне, что и swagger, info, paths

Может кто-нибудь сказать мне, как расширить файл swagger, созданный Swashbuckle, чтобы включить эти глобальные параметры?

Использование ядра ASPNET

Ответ №1:

В этом случае вы можете добавить к Extensions переменной непосредственно в Startup.cs in SwaggerDoc .

 
services
    .AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo
        {
            // Any other properties

            Extensions = new Dictionary<string, IOpenApiExtension>
            {
                {
                    "x-google-backend", new OpenApiObject
                    {
                        {"address", new OpenApiString("https://YYYY-dev-ax7nuhuyua-uc.a.run.app")},
                        {"protocol", new OpenApiString("h2")}
                    }
                },
                {
                    "host", new OpenApiString("XXXX-ax7nuhuyua-uc.a.run.app")
                }
            }
        });
    });

 

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

1. Вот и все .. спасибо, это понятие «расширений», с которым я не был знаком.

Ответ №2:

Я думаю, вы можете добиться этого, создав фильтр операций, подобный следующему:

     public class AddParameterOperationFilter : IOperationFilter
    {
        public void Apply(OpenApiOperation operation, OperationFilterContext context)
        {
            // add your parameters here
            operation.Parameters.Add(new OpenApiParameter());
        }
    }
 

В вашем Startup.cs вы можете добавить этот фильтр в конвейер swagger DI, используя следующее:

 services.AddSwaggerGen(options =>
{
  options.OperationFilter<AddParameterOperationFilter>();
});

 

Отказ от ответственности: я не пробовал это для этой конкретной проблемы, но я использовал фильтры операций для настройки документов swagger.

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

1. мм .. возможно, я что-то здесь упускаю, но, похоже, это было бы правильно, если бы я хотел добавить параметр к каждому из методов / операций. Этот метод Apply вызывается для каждого метода, который я предоставляю, а контекст — это сам метод. IDocumentFilter больше похож на то, что я хочу, но я не совсем понимаю, как его использовать для добавления этих глобальных элементов новостей.

2. Извините, я думал, это то, что вы искали. Мой плохой