116 votes

ASP.NET Core - Swashbuckle ne crée pas de fichier swagger.json

J'ai de la difficulté à obtenir le Swashbuckle.AspNetCore (1.0.0) à générer une sortie. J'ai lu l'arrogance.fichier json doit être écrit dans '~/swagger/docs/v1'. Cependant, je n'obtiens pas de sortie.

J'ai commencé avec un tout nouveau ASP.NET API de Base du projet. Je dois mentionner que c'est ASP.NET Core 2. L'API travaille, et je suis capable de récupérer des valeurs dans les valeurs de contrôleur de l'amende juste.

Mon démarrage de classe a la configuration exactement comme décrit dans cet article (Swashbuckle.AspNetCore sur GitHub).

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        services.AddSwaggerGen(c =>
        {
            c.SwaggerDoc("v1", new Info { Title = "My API", Version = "v1" });
        });
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger();
            app.UseSwaggerUI(c =>
            {
                c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAPI V1");
            });
        }
        else
        {
            app.UseExceptionHandler();
        }

        app.UseStatusCodePages();
        app.UseMvc();

        //throw new Exception();
    }
}

Vous pouvez voir le NuGet références...

enter image description here

Encore une fois, c'est tout le modèle par défaut, mais je inclure le ValuesController pour la référence...

[Route("api/[controller]")]
public class ValuesController : Controller
{
    // GET api/values
    [HttpGet]
    public IEnumerable<string> Get()
    {
        return new string[] { "value1", "value2" };
    }

    // GET api/values/5
    [HttpGet("{id}")]
    public string Get(int id)
    {
        return "value";
    }

    // POST api/values
    [HttpPost]
    public void Post([FromBody]string value)
    {
    }

    // PUT api/values/5
    [HttpPut("{id}")]
    public void Put(int id, [FromBody]string value)
    {
    }

    // DELETE api/values/5
    [HttpDelete("{id}")]
    public void Delete(int id)
    {
    }
}

85voto

J'ai eu le même problème. Vérifier http://localhost:XXXX/swagger/v1/swagger.json. Si vous obtenez toute une erreurs, les corriger.

Par exemple, j'ai eu l'ambiguïté d'un itinéraire dans une base de contrôleur de classe et j'ai eu le message d'erreur: "Ambigu méthode HTTP d'action. Actions nécessitent explicite HttpMethod de liaison pour Swagger 2.0.". Si vous utilisez la base de contrôleurs assurez-vous que votre public méthodes utilisent la HttpGet/HttpPost/HttpPut/HttpDelete OU la Route des attributs pour éviter ambigu routes.

Puis, aussi, j'avais défini à la fois HttpGet("route") ET de la Route("route") des attributs dans la même méthode, qui a été le dernier numéro de swagger.

73voto

TiagoBrenck Points 705

Je crois que vous avez manqué ces deux lignes sur votre configuration:

 if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();

    // Enable middleware to serve generated Swagger as a JSON endpoint.
    app.UseSwagger();
    app.UseSwaggerUI(c =>
    {
        c.SwaggerEndpoint("/swagger/v1/swagger.json", "MyAPI V1");
    });
}
 

Pour accéder à l’interface utilisateur Swagger, l’URL doit être: http: // localhost: XXXX / swagger /

Le json se trouve en haut de l'interface utilisateur de Swagger:

entrez la description de l'image ici

53voto

Paweł Zieliński Points 111

Si votre application est hébergée sur IIS / IIS Express, procédez comme suit:

 c.SwaggerEndpoint("../swagger/v1/swagger.json", "MyAPI V1");
 

38voto

Aaron Herchmer Points 111

Je rencontrais un problème similaire, mais pas exactement le même, avec swagger. Espérons que cela aide quelqu'un d'autre.

J'utilisais un titre de document personnalisé et je ne changeais pas le chemin du dossier dans SwaggerEndPoint pour qu'il corresponde au titre du document. Si vous laissez le noeud final pointant sur swagger / v1 / swagger.json, il ne trouvera pas le fichier json dans l'interface utilisateur de swagger.

Exemple:

 services.AddSwaggerGen(swagger =>
        {
            swagger.SwaggerDoc("AppAdministration", new Info { Title = "App Administration API", Version = "v1.0" });

        });


 app.UseSwaggerUI(c =>
        {
            c.SwaggerEndpoint("/swagger/AppAdministration/swagger.json", "App Administration");
        });
 

31voto

Sukhminder Sandhu Points 161
 #if DEBUG
   // For Debug in Kestrel
   c.SwaggerEndpoint("/swagger/v1/swagger.json", "Web API V1");
#else
   // To deploy on IIS
   c.SwaggerEndpoint("/webapi/swagger/v1/swagger.json", "Web API V1");
#endif
 

Lorsqu'il est déployé sur IIS webapi (URL de base) correspond à l'alias d'application. Vous devez conserver le même alias d'application (URL de base) pour tous les déploiements IIS car swagger recherche swagger.json à l'emplacement "/swagger/v1/swagger.json", mais ne crée pas de préfixe alias (URL de base) qui est la raison pour laquelle il ne fonctionne pas. .

Par exemple:

localhost / swagger / v1 / swagger.json - Impossible de trouver swagger.json

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X