#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. Извините, я думал, это то, что вы искали. Мой плохой