如何使用Autorest Directive解决参数重名导致的编译错误
解决Autorest转换Swagger YAML到PowerShell模块时的参数重名问题
问题场景
在将包含重名参数的Swagger YAML转换为PowerShell模块时,遇到编译错误:
error CS0100: The parameter name 'token' is a duplicate.
问题源于YAML中同时存在一个路径参数token和一个查询参数token,二者均为必填项:
parameters: - description: token in: path name: token required: true schema: type: string - description: <a href="(url edited)" target="_blank">Generate your application key</a> in: query name: key required: true schema: type: string - description: <a href="(url edited)" target="_blank">Getting a token from a user</a> in: query name: token required: true schema: type: string
Autorest生成的C#代码中会出现重复的token参数,导致编译失败。
解决方案
使用Autorest的directive配置规则,在不修改原Swagger文件的前提下,为重名的查询参数重命名。
步骤1:创建Autorest配置文件
新建autorest.yml(或在现有readme.md中添加),添加以下directive规则:
directive: - from: swagger-document where: $.paths.*.*.parameters[?(@.name == 'token' && @.in == 'query')] transform: > $["x-ms-client-name"] = "userToken";
该规则会定位所有操作中名称为token且位置为query的参数,通过x-ms-client-name扩展指定生成代码时使用的参数名(这里改为userToken,可根据需求自定义)。
步骤2:应用配置生成代码
运行Autorest命令时指定配置文件:
autorest --powershell --input-file=your-swagger.yml --output-folder=./ps-module-output --config-file=autorest.yml
效果验证
生成的C#代码中,参数将变为string token(路径参数)、string userToken(查询参数)、string key,避免了重名问题,模块可正常构建。
内容的提问来源于stack exchange,提问作者Nico
相关产品推荐
相关产品推荐

