解决NSwag为不同控制器同名Action生成带数字后缀方法的问题
解决NSwag生成同名API方法后缀重复的问题
方案1:为每个Action指定唯一的OperationId
在ASP.NET Core控制器的Action上添加[OperationId]特性,明确指定唯一操作ID,确保不同控制器下的同名方法拥有独立标识:
// Adam控制器 [ApiController] [Route("api/[controller]")] [Tags("Adam")] public class AdamController : ControllerBase { [HttpGet("GetData")] [OperationId("Adam_GetData")] public IActionResult GetData() { // 业务逻辑实现 } } // Badam控制器 [ApiController] [Route("api/[controller]")] [Tags("Badam")] public class BadamController : ControllerBase { [HttpGet("GetData")] [OperationId("Badam_GetData")] public IActionResult GetData() { // 业务逻辑实现 } }
保持operationGenerationMode为MultipleClientsFromFirstTagAndOperationId,NSwag会根据标签(控制器名)生成AdamHttpService和BadamHttpService,每个服务内的方法名使用指定的OperationId,不会自动添加数字后缀。
方案2:切换到路径分段生成客户端的模式
将operationGenerationMode设置为MultipleClientsFromPathSegments,NSwag会根据API路径分段(如/api/Adam/GetData中的Adam)自动划分客户端,无需额外配置OperationId:
// nswag.json配置示例 "operationGenerationMode": "MultipleClientsFromPathSegments", "clients": [ { "name": "AdamHttpService", "tag": "Adam" }, { "name": "BadamHttpService", "tag": "Badam" } ]
这种模式下,不同控制器的同名方法会被归类到各自的客户端中,方法名保持GetData不变,不会出现后缀重复问题。
方案3:自定义方法名生成规则
在NSwag配置中指定包含控制器前缀的方法名生成器,从根源避免方法名冲突:
// nswag.json配置 "methodNameGenerator": "ControllerNameOperationNameGenerator", "operationGenerationMode": "MultipleClientsFromFirstTagAndOperationId"
该生成器会自动将控制器名作为方法名前缀,生成AdamGetData和BadamGetData这类方法名,同时按标签生成独立客户端,兼顾方法名唯一性和客户端拆分需求。
内容的提问来源于stack exchange,提问作者Ramil Aliyev 007
相关产品推荐
相关产品推荐

