ASP. net Поле версии основного веб-API Swagger UI - возможно ли установить это значение в коде? - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть ASP. Net Core Web API с настроенным Swagger, который показывает конечные точки API. Также включено управление версиями API. Тем не менее, пользовательский интерфейс swagger не заполняет обязательное поле Version при проверке конечной точки. См. Изображение ниже:

Возможно ли заполнить это поле автоматически кодом, учитывая, что действие API уже настраивает это значение, т.е. MaptoApiVersion , Теоретически это поле должно заполняться автоматически ??

    [MapToApiVersion("2")]
    [HttpGet("GetV2")]
    [ProducesResponseType(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status500InternalServerError)]
    public async Task<IEnumerable<TodoDto>> GetV2()
    {
        var query = new AllTodosQuery(_context);
        var todos = await query.ExecuteAsync();
        return todos;
    }

enter image description here

1 Ответ

0 голосов
/ 24 февраля 2020

Проблема как минимум в два раза. Во-первых, расширения API Explorer из API Versioning предоставляют параметру version значение по умолчанию, но многие генераторы Swagger / OpenAPI (такие как Swashbuckle) все еще не соблюдают его. Если вы хотите включить это поведение, вам нужен пользовательский IOperationFilter , который делает что-то с эффектом:

var parameter = operation.Parameters.First(p => p.Name == "version");
var description = context.ApiDescription.ParameterDescriptions.First(p => p.Name == "version");

if (parameter.Schema.Default == null && description.DefaultValue != null)
{
    parameter.Schema.Default = new OpenApiString(description.DefaultValue.ToString());
}

Вы можете найти полный сквозной пример в API Версионное хранилище в: SwaggerDefaultValues.cs

Поскольку управление версиями осуществляется по сегменту URL, если вы хотите встроить его в шаблон маршрута без соответствующего параметра, вам нужно только настроить расширения API Explorer сделать это следующим образом:

services.AddVersionedApiExplorer(options => options.SubstituteApiVersionInUrl = true);

Этот параметр только применяется к методу управления версиями сегмента URL.

Полный пример сквозного Swashbuckle с версионированием API можно найти внутри Startup.cs внутри репо.

...