web-dev-qa-db-fra.com

Valeur par défaut Swagger pour le paramètre

Comment définir la valeur par défaut de la propriété dans swagger générée à partir de l'API suivante?

public class SearchQuery
{
        public string OrderBy { get; set; }

        [DefaultValue(OrderDirection.Descending)]
        public OrderDirection OrderDirection { get; set; } = OrderDirection.Descending;
}


public IActionResult SearchPendingCases(SearchQuery queryInput);

Swashbuckle génère OrderDirection en tant que paramètre requis. Je voudrais être optionnel et indiquer au client la valeur par défaut (pas sûr que swagger le supporte).

Je n'aime pas rendre le type de propriété nullable. Y a-t-il une autre option? Idéalement, en utilisant des classes intégrées ...

J'utilise Swashbuckle.AspNetCore - https://docs.Microsoft.com/en-us/aspnet/core/tutorials/web-api-help-pages-using-swagger?tabs=visual-studio

7
Liero

J'ai toujours défini la valeur par défaut sur le paramètre lui-même comme ceci:

public class TestPostController : ApiController
{
    public decimal Get(decimal x = 989898989898989898, decimal y = 1)
    {
        return x * y;
    }
}

Voici à quoi ça ressemble sur le swagger-ui:
http://swashbuckletest.azurewebsites.net/swagger/ui/index#/TestPost/TestPost_Get


METTRE À JOUR

Suite à la discussion sur les commentaires que j’ai mis à jour Swagger-Net pour lire la DefaultValueAttribute par réflexion Voici l’exemple de classe que j’utilise:

public class MyTest
{
    [MaxLength(250)]
    [DefaultValue("HelloWorld")]
    public string Name { get; set; }
    public bool IsPassing { get; set; }
}

et voici à quoi ressemble swagger json:

"MyTest": {
  "type": "object",
  "properties": {
    "Name": {
      "default": "HelloWorld",
      "maxLength": 250,
      "type": "string"
    },
    "IsPassing": {
      "type": "boolean"
    }
  },
  "xml": {
    "name": "MyTest"
  }
},

Le code source de Swagger-Net est ici:
https://github.com/heldersepu/Swagger-Net

Et le code source du projet de test est ici:
https://github.com/heldersepu/SwashbuckleTest

3
Helder Sepulveda

Définir la valeur du paramètre par défaut fonctionne comme ceci si vous pouvez le faire dans votre contrôleur

// GET api/products
[HttpGet]
public IEnumerable<Product> Get(int count = 50)
{
    Conn mySqlGet = new Conn(_connstring);
    return mySqlGet.ProductList(count);
}
2
Colbs