Asp.net core ASP.net Core web API Swagger UI版本字段-是否可以在代码中设置此值?
我有一个ASP.Net核心Web API,配置了Swagger,显示了API端点。此外,还启用了API版本控制。但是,检查端点时,swagger UI未填充必填字段版本。请参见下图: 如果API操作已经配置了此值,即MaptoApiVersion,是否可以通过代码自动填充此字段。理论上,此字段应自动填充Asp.net core ASP.net Core web API Swagger UI版本字段-是否可以在代码中设置此值?,asp.net-core,swagger-ui,api-versioning,Asp.net Core,Swagger Ui,Api Versioning,我有一个ASP.Net核心Web API,配置了Swagger,显示了API端点。此外,还启用了API版本控制。但是,检查端点时,swagger UI未填充必填字段版本。请参见下图: 如果API操作已经配置了此值,即MaptoApiVersion,是否可以通过代码自动填充此字段。理论上,此字段应自动填充 [MapToApiVersion("2")] [HttpGet("GetV2")] [ProducesResponseType(StatusCodes.Status200
[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;
}
[MapToApiVersion(“2”)]
[HttpGet(“GetV2”)]
[产品响应类型(StatusCodes.Status200OK)]
[产品响应类型(StatusCodes.Status500InternalServerError)]
公共异步任务GetV2()
{
var query=new AllTodosQuery(_context);
var todos=await query.ExecuteAsync();
返回待办事项;
}
这个问题至少有两个方面。首先,API版本控制对API资源管理器的扩展确实为版本参数提供了一个默认值,但许多Swagger/OpenAPI生成器(如Swashback)仍然不支持它。如果要启用此行为,您需要一个自定义的IOperationFilter,它可以执行以下操作:
var parameter=operation.Parameters.First(p=>p.Name==“version”);
var description=context.apisdescription.ParameterDescriptions.First(p=>p.Name==“version”);
if(parameter.Schema.Default==null&&description.DefaultValue!=null)
{
parameter.Schema.Default=新的OpenApiString(description.DefaultValue.ToString());
}
您可以在以下API版本控制repo中找到完整的端到端示例:
由于您是按URL段进行版本控制的,如果您希望将其内联到路由模板中而不使用相应的参数,则只需配置API Explorer扩展即可,如下所示:
services.AddVersionedApiExplorer(options=>options.substituteApprovisionInUrl=true);
此选项仅适用于URL段版本控制方法
在repo中可以找到完整的端到端Swashback示例和API版本控制