ASP.NET Core - Swashbuckle schaffen nicht Gewinn.json-Datei
Ich habe Probleme damit, die Swashbuckle.AspNetCore (1.0.0) Paket erzeugen keine Ausgabe. Ich lese die Angeberei.json-Datei geschrieben werden sollten '~/swagger/docs/v1'. Aber ich bekomme keine Ausgabe.
Begann ich mit einer neuen Marke ASP.NET Kern-API Projekt. Ich sollte erwähnen, das ist ASP.NET Core 2. Die API funktioniert, und ich bin in der Lage, abrufen von Werten aus den Werte-controller einwandfrei.
Meine startup-Klasse hat die Konfiguration genau wie in diesem Artikel beschrieben (Swashbuckle.AspNetCore auf 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();
}
}
Sehen Sie die NuGet-Referenzen...
Wieder, dies ist die Standard-Vorlage, aber habe ich auch die ValuesController Referenz...
[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)
{
}
}
InformationsquelleAutor John Livermore | 2018-01-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie vermisst diese beiden Zeilen auf Ihrem Konfigurieren:
Zugriff auf Swagger UI, sollte die URL sein: http://localhost:XXXX/swagger/
Json gefunden werden können an der Spitze der Swagger-UI:
um Zugang zu stolzieren, Ihre URL sollte localhost:xxxx/swagger. Was ist der Fehler, wenn Sie darauf zugreifen?
Nun bin ich auch verbuggt. Ich weiß nicht, ob es tatsächlich eine Datei erstellt, oder ob es nur erzeugt das json-on-the-fly und nicht speichern.
Zur Vermeidung von Problemen mit IIS-Aliase entfernen /swagger/ aus der URL-Pfad. Es sollte wie folgt Aussehen: app.UseSwaggerUI(c => { c.SwaggerEndpoint("v1/swagger.json", "API name"); });
Danke @2b77bee6-5445-4c77-b1eb-4df3e5; das funktionierte perfekt für mich.
InformationsquelleAutor TiagoBrenck
Wenn Sie eingesetzt werden, um die IIS-webapi(Basis-URL) ist die Anwendung Alias. Sie müssen die Anwendung Alias(Basis-URL) gleichen, für alle IIS-Bereitstellungen, da swagger sieht für swagger.json at "/swagger/v1/swagger.json" Lage, aber nicht Präfix-Anwendung Alias(Basis-URL), das ist der Grund, warum es nicht funktioniert.
Beispiel:
InformationsquelleAutor Sukhminder Sandhu
Ich hatte das gleiche problem. Überprüfen Sie http://localhost:XXXX/swagger/v1/swagger.json. Wenn Sie einen Fehler, beheben Sie das Problem.
Beispielsweise hatte ich einen Mehrdeutiger route in einen Basis-controller-Klasse und ich bekam die Fehlermeldung: "Mehrdeutiger HTTP-Methode für die Aktion. Handlungen bedürfen einer ausdrücklichen HttpMethod verbindlich für Swagger 2.0.".
Wenn Sie mit Basis-Controller stellen Sie sicher, dass Ihre öffentlichen Methoden verwenden, die HttpGet/HttpPost/HttpPut/HttpDelete ODER Route Attribute, um mehrdeutige Routen.
Dann auch, ich hatte definiert, die sowohl HttpGet("route") UND Route("route") Attribute in der gleichen Methode, die die Letzte Ausgabe für swagger.
InformationsquelleAutor Marisol Gutiérrez
Ich war in einer ähnlichen, aber nicht genau das gleiche Problem mit swagger. Hoffentlich hilft jemand anderes.
War ich mit einer benutzerdefinierten Dokument-Titel und war nicht die änderung der Ordner-Pfad in der SwaggerEndPoint passend der Titel des Dokuments. Wenn Sie verlassen den Endpunkt zeigen, swagger/v1/swagger.json ist es nicht finden Sie die json-Datei in der swagger-UI.
Beispiel:
InformationsquelleAutor Aaron Herchmer
Müssen Sie conform 2 Regeln:
[HttpGet("xxx")]
,[HttpPost("xxx")]
oder ... statt[Route("xxx")]
.[NoAction]
Attribut.Beachten Sie, dass http://localhost:XXXX/swagger/ Seite Anfragen für http://localhost:XXXX/swagger/v1/swagger.json - Datei, sondern eine Ausnahme auftreten von Swagger, wenn Sie nicht entsprechen oben genannten Regeln.
InformationsquelleAutor Mohammad Barbast
Wenn Ihre Anwendung gehostet wird unter IIS/IIS Express versuchen Sie Folgendes:
InformationsquelleAutor Paweł Zieliński
Ich persönlich hatte das gleiche Problem und als ich heute wieder versucht nach einer Weile fand ich in der neuen version (2.5.0), die in die json ich sehen konnte, eine Erklärung des Fehlers, wurde in hier.
Auch eine andere Sache, die geholfen hat, zu beheben es für mich war, entfernen die hosting-Informationen, die mit der website verbunden ist, ist halt drin "..vs\config\applicationhost.config" im Stammverzeichnis der Lösung Ordner
Ich entfernt das element aus, das war die Konfiguration der website.
InformationsquelleAutor Alberto
Ich stieß auf das gleiche Problem, und bemerkte, dass meine API ist nicht hosted in den root-Ordner und in einem virtuellen Verzeichnis.
Ich zog meine API, um den root-Ordner in IIS und arbeitete.
Mehr info in dieser Antwort
InformationsquelleAutor DanielV