2017-07-14 3 views
0

Je n'ai eu aucun problème pour obtenir un fichier json dans mon projet API Web en utilisant windows' tutorial.Générer yaml swagger en utilisant Swashbuckle

En raison de certaines exigences, je voudrais être en mesure de récupérer un fichier yaml. Mais le problème est qu'il n'y a pas de crochet que je pourrais trouver pour rendre cela possible.

Est-ce que quelqu'un sait solution de contournement pour ce problème?

Répondre

2

Une option sera d'ajouter un IDocumentFilter à votre projet, voici quelques échantillons:

private class YamlDocumentFilter : IDocumentFilter 
    { 
     public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) 
     { 
      string file = AppDomain.CurrentDomain.BaseDirectory + "swagger_yaml.txt"; 
      if (!File.Exists(file)) 
      { 
       var serializer = new YamlSerializer(); 
       serializer.SerializeToFile(file, swaggerDoc); 
      } 
     } 
    } 

...

private class YamlDocumentFilter : IDocumentFilter 
    { 
     public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer) 
     { 
      string file = AppDomain.CurrentDomain.BaseDirectory + "swagger.yaml"; 
      if (!File.Exists(file)) 
      { 
       var serializer = new YamlDotNet.Serialization.Serializer(); 
       using (var writer = new StringWriter()) 
       { 
        serializer.Serialize(writer, swaggerDoc); 
        var stream = new StreamWriter(file); 
        stream.WriteLine(writer.ToString()); 
       } 
      } 
     } 
    } 

mais cela dépend de votre projet si l'ajout une référence supplémentaire à YamlSerializer ou YamlDotNet est acceptable.

+0

Cela semble être la bonne façon de procéder, je n'ai pas été en mesure de le vérifier. Mais c'est peut-être parce que je me déploie dans un tissu de service. – Manny42

+0

arghhh! le diable dans les détails (*** tissu de service ***) oui vous avez probablement besoin de modifier cet exemple ou essayer avec une dépendance différente ... – HelderSepu

+0

J'ai ajouté un échantillon en utilisant YamlSerializer que le code semble beaucoup plus simple et je l'ai vérifié que cela fonctionne sur Azure: http://swashbuckletest.azurewebsites.net/swagger_yaml.txt – HelderSepu