Swagger - скрыть параметры версии API - PullRequest
0 голосов
/ 21 марта 2020

Можно ли скрыть параметры 'api-version' и 'x-api-version'?

        services.AddApiVersioning(config =>
        {
            config.ReportApiVersions = true;
            config.DefaultApiVersion = new ApiVersion(1, 0);
            config.AssumeDefaultVersionWhenUnspecified = true;

            config.ApiVersionReader = ApiVersionReader.Combine(
             new QueryStringApiVersionReader(),
             new HeaderApiVersionReader()
             {
                 HeaderNames = { "x-api-version" }
             });
        });

        services.AddVersionedApiExplorer(
            options =>
            {
                // note: the specified format code will format the version as "'v'major[.minor][-status]"
                options.GroupNameFormat = "'v'VVV";

                options.DefaultApiVersionParameterDescription = "Do NOT modify api-version!";
            });

Я уже проверил как настроить swashbuckle-vs -microsoft-aspnetcore- mvc -versioning , который реализует метод RemoveVersionFromParameter, но в этом случае страница Swagger потеряет версию API и всегда использует версию по умолчанию v1.0. Как показано во фрагменте кода, я использую QueryStringApiVersionReader и HeaderApiVersionReader, но я не хочу поддерживать управление версиями URL-адресов.

Примечание. В API есть несколько страниц json для всех версий ( например, V1, V1.1, V2.0)

enter image description here

Ответы [ 2 ]

1 голос
/ 22 марта 2020

Вы смотрели на IDocumentFilter, с помощью которого вы можете удалить материал из последнего чванства. json, и это удалит его из пользовательского интерфейса

Вот пример того, как я удаляю некоторые свойства из определений:

    private class HideStuffDocumentFilter : IDocumentFilter
    {
        public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry s, IApiExplorer a)
        {
            foreach (var definition in swaggerDoc.definitions)
            {
                foreach (var prop in definition.Value.properties.ToList())
                {
                    if (prop.Value.maxLength == 9999)
                        definition.Value.properties.Remove(prop);
                }
            }
        }
    }

У меня есть еще несколько образцов здесь:
https://github.com/heldersepu/Swagger-Net-Test/blob/e701b1d20d0b42c1287c3da2641ca521a0a7b592/Swagger_Test/App_Start/SwaggerConfig.cs#L766

1 голос
/ 22 марта 2020

Вы можете добавить свой собственный пользовательский CSS и использовать его, чтобы скрыть эти элементы (и выполнить любую другую настройку по вашему желанию).

app.UseSwaggerUI(c =>
{
    ...
    c.InjectStylesheet("/swagger-ui/custom.css");
    ...
});

Edit - пример:

Предположим, вы пытаетесь скрыть - в моем примере; Вы можете легко адаптировать его к своему - параметр tenantId в этой операции «Удалить корзину»:

enter image description here

Это будет сделано так:

div#operations-baskets-remove tr[data-param-name="tenantId"] {
    display: none;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...