我正在尝试从 OpenAPI json 文件生成 NSwag C# 客户端。
当我这样做时,我确实生成了一个客户端文件,但它无法编译。它在同一个 .cs 文件中创建了 2x 部分类。
现在,如果我将其中一个类名更改为其他名称,该文件现在可以编译:
没有错误 - 编译正常。
所以我的问题是:为什么要这样做?
这是我的 Swagger UI 的图片(这是用 Swashbuckle 生成的,而不是 NSwag):
所以这意味着我的项目中有 2 个控制器:
有什么技巧可以解决这个问题吗?
我使用以下命令行来生成客户端:
dotnet-openapi --updateProject .\MyProject.csproj http://localhost:5100/swagger/v1/swagger.json
据我所知,Dotnet-openapi 正在“幕后”使用 NSwag CSharpClientGenerator。
我很高兴使用任何其他工具来生成 C# 客户端。
我遇到了这个问题,在盯着代码一段时间后能够解决它。问题是我的端点在 uri 中有一个下划线 (
_
),这显然与 nswag 不兼容;
[HttpPost("a_bad_uri_with_underscore")]
public void SomeMethod() => _someHandler.Execute();
输入下划线是一个错误,我的意图是使用破折号(
-
),所以一旦更改它就可以了。
[HttpPost("a-working-uri-with-dash")]
public void SomeMethod() => _someHandler.Execute();
这需要一段时间才能弄清楚。其他答案以某种方式列出了生成器上的设置
OperationGenerationMode.SingleClientFromOperationId
,但我找不到如何做到这一点。我检查了 NSwag 源代码以了解如何设置它。
var document = await OpenApiYamlDocument.FromFileAsync("api.yaml");
var settings = new CSharpClientGeneratorSettings()
{
ClassName = "MyClient",
};
settings.CSharpGeneratorSettings.Namespace = "MyNamespace";
var generator = new CSharpClientGenerator(document, settings);
// How to Set SingleClientFromOperationId
generator.BaseSettings.OperationNameGenerator = new SingleClientFromOperationIdOperationNameGenerator();
var code = generator.GenerateFile();
File.WriteAllText("client.cs", code);
在我的例子中,解决方案是添加 NSWag CLI 参数:/OperationGenerationMode:SingleClientFromOperationId