.NET 5下使用NSwag能否为每个控制器生成独立客户端类?
NSwag生成C#客户端按控制器拆分类的配置说明
默认行为确认
你观察到的是NSwag生成C# Web客户端的默认标准实现:默认会将所有控制器的接口方法合并到单个客户端类中,方法命名默认采用{控制器名}_{操作名}的格式,也就是你遇到的webClient.Employee_get()调用形式。
按控制器拆分独立类的实现方式
NSwag完全支持按控制器拆分生成独立的客户端类,不同生成场景的配置方式如下:
- 如果你通过Visual Studio 添加服务引用 -> OpenAPI 方式生成:
- 添加服务引用的弹窗中点击「高级」按钮
- 找到生成多个客户端类的配置项,勾选后保存即可,生成后会自动按照控制器名拆分独立类,每个类只包含对应控制器的接口方法
- 如果你通过NSwag配置文件/NSwag.MSBuild/NSwagStudio生成:
找到配置中的operationGenerationMode参数,将值设置为MultipleClientsFromFirstTagAndOperationName即可。OpenAPI规范中默认每个接口的第一个Tag就是对应控制器名称,该配置会自动按Tag分组,每个分组生成一个独立的客户端类。
配置完成后,调用方式即可匹配你之前使用Autorest的习惯,示例如下:
// 初始化对应控制器的客户端,支持直接从DI容器注入 IEmployeeClient employeeClient = new EmployeeClient(httpClient); var employeeList = await employeeClient.GetAsync(); // 自行封装统一基类后也可以实现原调用结构 IWebClient webClient = new WebClient(httpClient); var employeeList = await webClient.Employee.GetAsync();
内容的提问来源于stack exchange,提问作者Noob
相关产品推荐
相关产品推荐

