Je ne parviens pas à obtenir le package Swashbuckle.AspNetCore (1.0.0) pour générer une sortie. J'ai lu le fichier swagger.json devrait être écrit dans '~/swagger/docs/v1'. Cependant, je ne reçois aucune sortie.
J'ai commencé avec un tout nouveau projet d'ASP.NET Core API. Je devrais mentionner que c’est ASP.NET Core 2. L’API fonctionne, et j’ai la possibilité de récupérer des valeurs à partir du contrôleur de valeurs.
Ma classe de démarrage a exactement la configuration décrite 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 les références NuGet ...
Encore une fois, c'est tout le modèle par défaut, mais j'inclus le ValuesController pour 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)
{
}
}
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 peut être trouvé au sommet de l'interface utilisateur Swagger:
#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 l’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 préfixe pas l’alias d’application (URL de base) raison cela ne fonctionnera pas.
Par exemple:
localhost/swagger/v1/swagger.json - Impossible de trouver swagger.json
Je courais dans 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 correspondre 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 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");
});
J'ai eu le même problème. Vérifiez http: // localhost: XXXX/swagger/v1/swagger.json . Si vous rencontrez des erreurs, corrigez-les.
Par exemple, j'avais une route ambiguë dans une classe de contrôleur de base et j'ai eu l'erreur suivante: "Méthode HTTP ambiguë pour l'action. Les actions nécessitent une liaison explicite HttpMethod pour Swagger 2.0.". Si vous utilisez des contrôleurs de base, assurez-vous que vos méthodes publiques utilisent les attributs HttpGet/HttpPost/HttpPut/HttpDelete OR pour éviter les itinéraires ambigus.
Ensuite, j’avais également défini les attributs HttpGet ("route") ET Route ("route") dans la même méthode, ce qui était le dernier problème pour swagger.
Si votre application est hébergée sur IIS/IIS Express, procédez comme suit:
c.SwaggerEndpoint("../swagger/v1/swagger.json", "MyAPI V1");
Vous devez vous conformer à 2 règles:
[HttpGet("xxx")]
, [HttpPost("xxx")]
ou ... au lieu de [Route("xxx")]
.[NoAction]
.Notez que http: // localhost: XXXX/swagger/ demandes de page pour http: // localhost: XXXX/swagger/v1/swagger.json fichier, mais une exception se produira de Swagger si vous ne le souhaitez pas. 'ne pas se conformer aux règles ci-dessus.
Personnellement, j’ai eu le même problème et quand j’ai réessayé aujourd’hui au bout d’un moment, j’ai trouvé dans la nouvelle version (2.5.0) qu’en entrant dans le json je pouvais voir une explication de l’erreur qui était dans ici .
Une autre chose qui m'a aidé à le résoudre a été de supprimer les informations d'hébergement connectées au site Web qui se trouvent dans "..vs\config\applicationhost.config" à la racine du dossier de la solution.
J'ai supprimé l'élément qui configurait le site Web.
<site name="**" id="9">
<application path="/" applicationPool=""></application>
<bindings></bindings>
</site>
Je suis tombé sur le même problème et j'ai constaté que mon API n'était pas hébergée dans le dossier racine ni dans un répertoire virtuel ..__ J'ai déplacé mon API dans le dossier racine dans IIS et j'ai travaillé.
Plus d'infos dans cette réponse