Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core ASP.net Core web API Swagger UI版本字段-是否可以在代码中设置此值?_Asp.net Core_Swagger Ui_Api Versioning - Fatal编程技术网

Asp.net core ASP.net Core web API Swagger UI版本字段-是否可以在代码中设置此值?

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

我有一个ASP.Net核心Web API,配置了Swagger,显示了API端点。此外,还启用了API版本控制。但是,检查端点时,swagger UI未填充必填字段版本。请参见下图:

如果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;
    }
[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版本控制