AutoRest生成C# REST客户端报重复操作错误,是否要求tags唯一?
AutoRest 重复操作报错说明
报错信息
node.exe : ERROR (DuplicateOperation): Duplicate Operation '' > 'Exports' detected(This is most likely due to 2 operation using the same 'operationId' or 'tags'). Duplicates have those paths:
疑问解答
该报错不存在误导,AutoRest 对 tags 的使用逻辑和 Swagger UI 不同:
- Swagger UI 中 tags 仅用于接口分组展示,但在 AutoRest 等代码生成工具的逻辑中,tags 除了用于将接口归类到同一个客户端类之外,还会参与自动生成操作唯一标识的规则。
- 当你的 swagger.json 中没有显式配置
operationId时,AutoRest 会默认使用[tag名称]_[HTTP请求方法]_[接口路径最后一段]的规则自动生成唯一的operationId用于区分不同接口。如果多个接口使用了相同的tag,且这些接口的HTTP方法、路径最后一段也重复,就会生成完全相同的operationId,触发重复操作校验报错。
解决方案
- 最稳妥的方案是为每个接口显式配置全局唯一的
operationId,既可以完全避免自动生成标识重复的问题,也可以自定义生成的C#客户端方法名,更符合代码规范。 - 若暂时不想修改swagger配置,可以调整AutoRest启动参数,添加
--allow-duplicate-operation-names绕过重复校验,或修改--operation-grouping参数将默认按tag分组改为其他分组规则。注意该方案可能导致生成的代码出现方法重名编译错误,需要额外适配。 - 调整接口的tag配置,保证相同tag下的接口HTTP方法+路径最后一段不会重复,也可以解决自动生成
operationId重复的问题。
内容的提问来源于stack exchange,提问作者DavisZ
相关产品推荐
相关产品推荐

