【问题标题】:Nswag adds null check for nullable/optional parametersNswag 为可空/可选参数添加空检查
【发布时间】:2023-02-22 08:20:07
【问题描述】:

我的问题与this (details here on Github) 基本相同,但是对于 C# 客户端 - [FromForm] SomeObject x 在控制器上有一些可为 null 的(可选)参数,并且 Nswag 生成的生成的客户端有空检查,如下所示:

public virtual async System.Threading.Tasks.Task<Attachment> UploadAsync(int? idProject = null, int? idTicket = null...
...
if (idProject == null) throw new System.ArgumentNullException("idProject");
else
{
    content_.Add(new System.Net.Http.StringContent(ConvertToString(idProject, System.Globalization.CultureInfo.InvariantCulture)), "IdProject");
}
...

原始模型(来自 API 项目)和在客户端项目中生成的模型都将这些字段作为可为空的,并且函数调用接受可为空的值。

来自 swagger 的 JSON 模式如下所示:

"/Attachment/Upload": {
  "post": {
    "tags": [
      "Attachment"
    ],
    "requestBody": {
      "content": {
        "multipart/form-data": {
          "schema": {
            "required": [
              "Name"
            ],
            "type": "object",
            "properties": {
              "IdProject": {
                "type": "integer",
                "format": "int32"
              },
              "IdTicket": {
                "type": "integer",
                "format": "int32"
              },...

我试过在 openApiToCSharpClient 中设置 "queryNullValue": "" 但它没有帮助。如何在生成的客户端中禁用这些检查?我必须使用[FromForm],因为我要同时发送文件和一些附加数据。

【问题讨论】:

    标签: c# asp.net-core openapi nswag


    【解决方案1】:

    如果要在生成的 C# 客户端代码中禁用空检查,可以修改 NSwag 配置以生成不带空检查的客户端代码。为此,您可以在 NSwag 配置中将 CSharpGeneratorSettings.GenerateNullableReferenceTypes 属性设置为 true。

    以下是如何在 .NET Core 项目中修改 NSwag 配置的示例:

    安装 NSwag.MSBuild NuGet 包:

    将 NSwag 配置文件添加到您的项目,例如 nswag.json。下面是将 GenerateNullableReferenceTypes 设置为 true 的示例配置文件:

      "runtime": "NetCore31",
      "swaggerGenerator": {
        "aspNetCoreToSwagger": {
          "assemblyPaths": [ "path/to/your/project.dll" ],
          "generateNullableReferenceTypes": true
        }
      },
      "codeGenerators": {
        "openApiToCSharpClient": {
          "generateNullableReferenceTypes": true
        }
      }
    }
    

    将 MSBuild 目标添加到运行 NSwag CLI 工具以生成客户端代码的项目文件:

      <Exec Command="dotnet nswag run -p $(MSBuildProjectFullPath) -c $(Configuration) -v" />
    </Target>
    

    此目标运行 NSwag CLI 工具以在每次构建之前生成客户端代码。

    构建您的项目。 NSwag CLI 工具应该生成没有空检查的客户端代码。

    请注意,在生成的客户端代码中禁用空值检查意味着您将需要在自己的代码中执行空值检查以适当地处理空值。

    【讨论】:

      猜你喜欢
      • 2015-02-19
      • 1970-01-01
      • 1970-01-01
      • 2017-01-10
      • 1970-01-01
      • 1970-01-01
      • 2017-03-16
      • 2018-08-10
      • 2011-09-26
      相关资源
      最近更新 更多