如何让NSwag生成的C#客户端方法名包含HTTP请求方法名
解决NSwag生成C#客户端时方法名包含HTTP请求类型的问题
我刚好处理过类似的场景,要让NSwag生成的C#客户端方法名自动带上对应的HTTP请求方法(比如GetContract、PostContract),而不是默认的同名加数字后缀,你可以通过以下几种方式实现:
方案1:用NSwagStudio可视化配置(快速上手)
- 打开NSwagStudio,加载你的Swagger JSON文件
- 切换到「C# Client」选项卡,找到Operation Generation Settings区域
- 在「Operation Name Generator」下拉框里选择
HttpOperationNameGenerator——这个生成器会自动把HTTP方法名作为前缀加到方法名里 - 如果需要更灵活的自定义规则,也可以选
CustomOperationNameGenerator,然后在下方的「Operation Name Template」里填写模板,比如{HttpMethod}{OperationName},就能生成如GetContract、DeleteContractById这类清晰的方法名
方案2:通过CLI命令行配置(适合自动化构建)
如果是用NSwag CLI批量生成客户端,可以在命令里指定操作名称生成规则:
# 使用内置的HTTP方法前缀生成器 nswag swagger2csclient /input:swagger.json /output:ApiClient.cs /operationNameGenerator:HttpOperationNameGenerator # 或者自定义模板 nswag swagger2csclient /input:swagger.json /output:ApiClient.cs /operationNameTemplate:"{HttpMethod}{OperationName}"
方案3:通过nswag.json配置文件(项目级统一管理)
如果项目用配置文件管理NSwag生成规则,在nswag.json的codeGenerators/csharpClient节点下添加配置:
{ "codeGenerators": { "csharpClient": { "operationNameGenerator": "HttpOperationNameGenerator", // 若需要自定义模板,替换成下面的配置 // "operationNameTemplate": "{HttpMethod}{OperationName}" } } }
按照以上设置后,你提到的/contract端点的GET、POST请求会生成GetContractAsync、PostContractAsync;/contract/{ID}的GET、POST、DELETE请求则会生成GetContractByIdAsync、PostContractByIdAsync、DeleteContractByIdAsync,彻底解决同名方法加数字后缀的问题。
内容的提问来源于stack exchange,提问作者Ergwun
相关产品推荐
相关产品推荐

