2017-04-18 2 views
2

ContexteComment résoudre l'erreur Swagger « type d'instance (chaîne) ne correspond à aucun type primitif a permis ... »

Je viens de commencer un nouveau projet et aimerait utiliser Swagger pour mon API Documentation . J'exécute actuellement mon projet localement, hébergé dans IIS.

J'ai modifié mon fichier hosts pour donner au site un en-tête valide. Pour cet article, disons que l'en-tête est publicapiurl.domain.com. Alors, je l'ai ajouté l'entrée suivante dans mon fichier hosts:

127.0.0.1 publicapiurl.domain.com 

Maintenant, quand je tape publicapiurl.domain.com/swagger je reçois les fanfaronnades docs. La configuration initiale semblait assez simple mais j'ai un message rouge 'ERROR {...}' dans le coin inférieur droit de mon doc. Le message d'erreur se lit comme suit:

{"messages":["malformed or unreadable swagger supplied"],"schemaValidationMessages":[{"level":"error","domain":"validation","keyword":"type","message":"instance type (string) does not match any allowed primitive type (allowed: [\"object\"])","schema":{"loadingURI":"#","pointer":""},"instance":{"pointer":""}}]} 

J'ai travaillé un peu avec Swagger dans le passé donc je pris le lien fourni à la doc fanfaronnades généré et copié le code. J'ai collé le code dans l'éditeur swagger.io/tools pour voir ce que leur processus de validation pourrait me dire. Le code que j'ai collé validé sans aucune erreur. Voici le code:

swagger: '2.0' 
info: 
    version: v1 
    title: Generic.Public.Api 
host: publicapiurl.domain.com 
schemes: 
    - http 
paths: 
    /api/Values: 
    get: 
     tags: 
     - Values 
     operationId: Values_Get 
     consumes: [] 
     produces: 
     - application/json 
     - text/json 
     - application/xml 
     - text/xml 
     responses: 
     '200': 
      description: OK 
      schema: 
      type: array 
      items: 
       type: string 
    post: 
     tags: 
     - Values 
     operationId: Values_PostByvalue 
     consumes: 
     - application/json 
     - text/json 
     - application/xml 
     - text/xml 
     - application/x-www-form-urlencoded 
     produces: [] 
     parameters: 
     - name: value 
      in: body 
      required: true 
      schema: 
      type: string 
     responses: 
     '204': 
      description: No Content 
    '/api/Values/{id}': 
    get: 
     tags: 
     - Values 
     operationId: Values_GetByid 
     consumes: [] 
     produces: 
     - application/json 
     - text/json 
     - application/xml 
     - text/xml 
     parameters: 
     - name: id 
      in: path 
      required: true 
      type: integer 
      format: int32 
     responses: 
     '200': 
      description: OK 
      schema: 
      type: string 
    put: 
     tags: 
     - Values 
     operationId: Values_PutByidvalue 
     consumes: 
     - application/json 
     - text/json 
     - application/xml 
     - text/xml 
     - application/x-www-form-urlencoded 
     produces: [] 
     parameters: 
     - name: id 
      in: path 
      required: true 
      type: integer 
      format: int32 
     - name: value 
      in: body 
      required: true 
      schema: 
      type: string 
     responses: 
     '204': 
      description: No Content 
    delete: 
     tags: 
     - Values 
     operationId: Values_DeleteByid 
     consumes: [] 
     produces: [] 
     parameters: 
     - name: id 
      in: path 
      required: true 
      type: integer 
      format: int32 
     responses: 
     '204': 
      description: No Content 
definitions: {} 

Est-ce que quelqu'un sait ce que l'erreur ci-dessus signifie que je reçois effectivement ou comment je peux être en mesure de le résoudre?

Ma meilleure estimation est qu'elle a quelque chose à voir avec ma modification du fichier hosts et un certain type de problème CORS peut-être ... mais je suis sérieusement à court de ressources. Toutes les suggestions sont appréciées!

EDIT:

je simplifie le contrôleur encore plus et a retiré le type de réponse XML, mais je reçois toujours la même erreur en cours d'exécution sur mon IIS local. La définition swagger valide toujours sans erreurs à l'intérieur de l'éditeur en ligne Swagger.

J'ai également changé du paquet de pince de Swashbuckle à Swashbuckle.Core mais le résultat est le même.

Voici la nouvelle définition de fanfaronnades:

swagger: '2.0' 
info: 
    version: v1 
    title: Generic Public Api 
host: l-publicapi.generic.com 
schemes: 
    - http 
paths: 
    /api/values/values: 
    get: 
     tags: 
     - Values 
     operationId: Values_Get 
     consumes: [] 
     produces: 
     - application/json 
     - text/json 
     responses: 
     '200': 
      description: OK 
      schema: 
      type: array 
      items: 
       type: string 
    '/api/values/values/{id}': 
    get: 
     tags: 
     - Values 
     operationId: Values_GetByid 
     consumes: [] 
     produces: 
     - application/json 
     - text/json 
     parameters: 
     - name: id 
      in: path 
      required: true 
      type: integer 
      format: int32 
     responses: 
     '200': 
      description: OK 
      schema: 
      type: string 
definitions: {} 

Toutes les suggestions supplémentaires?

Répondre

0

Il y a un problème, mais je ne sais pas si c'est la raison pour laquelle le validateur se plaint. Quoi qu'il en soit:

Dans OpenAPI (fka Swagger) 2.0, une opération ne peut pas utiliser à la fois les données de formulaire et JSON/XML. Cela est dû au fait que les données de formulaire sont décrites en utilisant les paramètres in: formData alors que JSON/XML est décrit en utilisant les paramètres in: body, et les paramètres de corps et de formulaire ne peuvent pas exister ensemble pour la même opération. Cela sera possible dans OpenAPI 3.0 (qui est RC au moment de l'écriture).

+0

Merci pour la réponse. Je vais essayer de spécifier uniquement JSON et voir si cela fait une différence. – Zoop

+0

J'ai eu la même erreur et je l'ai résolu de cette façon: ouvrez votre fichier swagger dans Swagger UI et transformez-le en Swagger 3.0. Ensuite, téléchargez le fichier 3.0 sur votre projet hébergé. L'erreur "type d'instance (chaîne) ne correspond à aucun type primitif autorisé ..." doit être supprimée. – Peter