web-dev-qa-db-fra.com

Marquer des cordes comme non-nullables dans ASP.NET CORE 3.0 Swagger

J'utilise ASP.NET Core 3 et Swashbuckle avec la plupart des configurations par défaut et j'ai un paramètre DTO avec une chaîne sur celle-ci que je veux être non nullable. Comment puis-je atteindre cet objectif? Remarque, requis et la nullabilité sont des préoccupations distinctes dans Swagger.

Il utilise également C # 8 et les éléments non nullables, le compilateur devrait donc annoter la propriété comme non involonible déjà. Il est compréhensible que Swashbuckle n'ait pas été mis à jour pour le prendre en compte (et peut-être que je ne peux pas), mais j'aimerais pouvoir remplacer la métadonnée générée en quelque sorte.

class MyDto {
    [Required]
    // I want this to show as non-nullable in the swagger documentation (and ideally also be non-nullable in the binding)
    public string TestProp { get; set; }
}

[HttpPost]
public void Post([FromBody] MyDto requestModel) {
}

J'ai essayé de le faire. J'ai également essayé d'ajouter les annotations de Newtonsoft, mais rien d'entre eux ne semblait le faire.

Bit pertinent de Swagger Doc qui est généré:

    "MyDto": {
      "required": [
        "testProp"
      ],
      "type": "object",
      "properties": {
        "testProp": {
          "type": "string",
          "nullable": true
        }
      },
      "additionalProperties": false
     }

Notez que le paramètre de chaîne directement sous forme de paramètre ne génère pas l'attribut nullable. Par exemple.

[HttpPost("testPost")]
public void Post([FromBody] [Required] string testProp) {
}

va générer

"/api/test/testPost": {
  "post": {
    "tags": [
      "Test"
    ],
    "requestBody": {
      "content": {
        "application/json": {
          "schema": {
            "type": "string"
          }
        },
        "text/json": {
          "schema": {
            "type": "string"
          }
        },
        "application/*+json": {
          "schema": {
            "type": "string"
          }
        }
      },
      "required": true
    },
    "responses": {
      "200": {
        "description": "Success"
      }
    }
  }
},
7
Quails4Eva

lisez sur la documentation pour RequiredAttribute :

Spécifie qu'une valeur de champ de données est requise.

0
Jazb