.NET 6 API如何基于当前代码而非NSwag Studio定义生成C#客户端?
基于.NET 6 API代码实时生成C#客户端(NSwag配置方案)
1. 安装必要的NuGet包
- Application.API:确保已安装
Swashbuckle.AspNetCore(你已集成Swagger UI,此步骤应已完成)。 - Application.API.Http:安装
NSwag.MSBuild包,用于构建时自动执行客户端生成任务。
2. 配置项目依赖
在Application.API.Http的.csproj文件中添加API项目引用,保证构建客户端前先编译最新的API代码:
<ProjectReference Include="..\Application.API\Application.API.csproj" />
3. 配置自动生成任务(两种方案可选)
方案一:直接用MSBuild命令生成(无需nswag.json)
修改Application.API.Http的.csproj,添加以下构建目标:
<Target Name="GenerateApiClient" BeforeTargets="BeforeBuild"> <!-- 从API项目生成Swagger定义并直接生成客户端 --> <Exec Command="$(NSwagExe_Net60) aspnetcoreopenapi2csclient /project:../Application.API/Application.API.csproj /output:Generated/ApiClient.cs /namespace:Application.API.Http /generateClientInterfaces:true /generateDtoTypes:true /injectHttpClient:true" /> </Target>
参数说明:
/project:指定API项目路径/output:客户端代码输出路径(建议放在Generated文件夹,避免手动修改)/namespace:客户端代码的命名空间/generateClientInterfaces:true:生成客户端接口,方便依赖注入/injectHttpClient:true:生成支持注入HttpClient的构造函数
方案二:使用配置文件nswag.json(更灵活)
- 在Application.API.Http项目根目录创建
nswag.json,配置如下:
{ "runtime": "Net60", "documentGenerator": { "aspNetCoreToOpenApi": { "project": "../Application.API/Application.API.csproj", "documentName": "v1", "title": "Application API", "version": "1.0.0", "isAspNetCore": true, "resolveJsonOptions": true, "outputType": "OpenApi3" } }, "codeGenerators": { "openApiToCSharpClient": { "className": "{controller}Client", "namespace": "Application.API.Http", "output": "Generated/ApiClient.cs", "generateClientInterfaces": true, "generateDtoTypes": true, "injectHttpClient": true, "disposeHttpClient": true, "generateBaseUrlProperty": true, "generateExceptionClasses": true } } }
该配置直接从API项目动态生成Swagger定义,无硬编码的API内容,完全同步代码变更。
- 在Application.API.Http的
.csproj中添加构建任务:
<Target Name="GenerateApiClient" BeforeTargets="BeforeBuild"> <Exec Command="$(NSwagExe_Net60) run nswag.json /variables:Configuration=$(Configuration)" /> </Target>
4. 验证配置
- 清理解决方案后重新构建Application.API.Http项目。
- 检查Generated文件夹下的
ApiClient.cs,确认接口、DTO与API代码一致。 - 修改API的控制器或DTO,重新构建客户端项目,验证生成的代码自动更新。
注意事项
- 确保NSwag.MSBuild版本与NSwag CLI版本一致,避免兼容性问题。
- 生成的客户端代码禁止手动修改,所有变更通过调整API代码后重新生成实现。
- 若API有自定义Json序列化配置,NSwag会自动读取
AddJsonOptions中的设置,保证序列化逻辑一致。
内容的提问来源于stack exchange,提问作者MakeThePainStop
相关产品推荐
相关产品推荐

