web-dev-qa-db-fra.com

Swagger - API Web - Paramètres de requête facultatifs

[HttpGet]
[Route("students")]
[SwaggerOperation(Tags = new[] { "Student" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResponseModel<IList<Student>>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(StudentResponseExample))]
[SwaggerResponse(HttpStatusCode.InternalServerError)]
public IHttpActionResult SearchStudent()
    {
        IDictionary<string, string> searchParams = null;
        searchParams = ControllerContext.GetQueryStrings();
        .
        .
        .

    }

L'API ci-dessus a trois paramètres facultatifs qui seront transmis comme chaîne de requête

  1. SyncDate - Long
  2. Décalage - int
  3. Limite - int

L'utilisateur n'a pas la possibilité de saisir ces paramètres de requête facultatifs dans l'interface utilisateur de swagger. Veuillez me guider pour implémenter les paramètres de requête facultatifs.

J'utilise swashbuckle et je préfère utiliser des annotations plutôt que d'avoir une longue section de commentaires sur chaque méthode API pour les fonctionnalités de swagger.

J'ai référé ce qui suit Ajout de paramètres de chaîne de requête à mes spécifications Swagger et créé la classe SwaggerParameterAttribute dans Filters dossier de l'API Web et quand en essayant d'ajouter le OperationFilter dans G lobalConfiguration.Configuration .EnableSwagger comme indiqué, il jette le type ou le nom d'espace de nommage SwaggerParametersAttributeHandler Ne peut être trouvé. J'ai même ajouté l'espace de noms du dossier Filters mais l'erreur persiste.

Veuillez indiquer comment implémenter les paramètres de requête facultatifs dans Swagger

6
Gopi

La façon dont Swagger fonctionne, il extrait des paramètres basés sur votre signature d'Action, c'est-à-dire les paramètres de votre Action, mais ici vous obtenez ces valeurs de ControllerContext dont Swagger ne sera évidemment jamais au courant.

Vous devez donc modifier la signature de l'action et y passer vos paramètres.

Ils seront traités comme facultatifs si vous les faites de type nullable -

[HttpGet]
[Route("students")]
[SwaggerOperation(Tags = new[] { "Student" })]
[SwaggerResponse(HttpStatusCode.OK, Type = typeof(ResponseModel<IList<Student>>))]
[SwaggerResponseExample(HttpStatusCode.OK, typeof(StudentResponseExample))]
[SwaggerResponse(HttpStatusCode.InternalServerError)]
public IHttpActionResult SearchStudent(long? SyncDate = null,int? OffSet = null,int? Limit = null)
    {
        // Use the variables now here
        .
        .
        .

    }
9
Ipsit Gaur

Cela a fonctionné pour moi:

[System.Web.Http.HttpGet] 
[Route("api/DoStuff/{reqParam}")]  
[Route("api/DoStuff/{reqParam}/{optParam1:alpha?}/{optParam2:datetime?}")]
public string Get(string reqParam, string optParam1= "", string optParam2= "")

Cela a créé deux sections dans mon interface utilisateur Swagger, mais cela fonctionne pour moi.

1
Manuel Plaza