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
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
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
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);
}