Azure Autorest生成C#代码时无需修改源YAML排除冲突方法的方案
解决方案
你遇到的问题可通过Autorest内置的directives功能完全解决,无需修改原始OpenAPI规范文件,具体操作如下:
问题根因
错误核心原因是/home-lending/applications/{id}/assignees路径下的GET、PATCH、PUT三个接口未定义operationId,Autorest自动生成时为三者分配了相同的名称,触发重复操作冲突。附带的警告是对应贷款金额字段的schema缺少类型声明。
方案1:修复冲突保留所有接口(推荐)
在你的Autorest配置文件(通常为autorest.yaml或autorest.md)中添加如下directives配置,手动为三个冲突接口指定唯一的operationId,同时补全缺失的类型声明:
# autorest.yaml 配置示例 input-file: v4.2.0_stable.openapi_spec.yaml csharp: true output-folder: ./BlendApiClient namespace: Your.Custom.Namespace.BlendApi directive: # 为冲突接口分别设置唯一operationId - from: swagger-document where: $.paths["/home-lending/applications/{id}/assignees"].get transform: $.operationId = "GetHomeLendingApplicationAssignees" - from: swagger-document where: $.paths["/home-lending/applications/{id}/assignees"].patch transform: $.operationId = "UpdateHomeLendingApplicationAssignees" - from: swagger-document where: $.paths["/home-lending/applications/{id}/assignees"].put transform: $.operationId = "ReplaceHomeLendingApplicationAssignees" # 补全缺失类型的schema定义 - from: swagger-document where: $.components.schemas["paths·bz6x3r·homelending-applications-id·patch·requestbody·content·application-json·schema·properties·loanamount·allof·1"] transform: >- $.type = "number"; $.format = "decimal";
配置完成后直接运行autorest命令即可正常生成代码。
方案2:跳过冲突接口
如果你不需要使用这几个冲突的接口,可以直接通过directive从加载的规范中移除对应路径,配置如下:
directive: - from: swagger-document where: $.paths transform: delete $["/home-lending/applications/{id}/assignees"]
命令行临时使用方案
如果你不想单独写配置文件,也可以直接在运行Autorest命令时传入directive参数,示例如下:
autorest --input-file=v4.2.0_stable.openapi_spec.yaml --csharp --output-folder=Generated \ --directive='[{"from":"swagger-document","where":"$.paths[\"/home-lending/applications/{id}/assignees\"].get","transform":"$.operationId = \"GetHomeLendingApplicationAssignees\""},{"from":"swagger-document","where":"$.paths[\"/home-lending/applications/{id}/assignees\"].patch","transform":"$.operationId = \"UpdateHomeLendingApplicationAssignees\""},{"from":"swagger-document","where":"$.paths[\"/home-lending/applications/{id}/assignees\"].put","transform":"$.operationId = \"ReplaceHomeLendingApplicationAssignees\""}]'
内容的提问来源于stack exchange,提问作者Leonardo Herrera
相关产品推荐
相关产品推荐

