Swashbuckle/Swagger + ASP.Net Kern: "Fehler beim laden der API-definition"
Entwickle ich eine ASP.NET Core-2-Anwendung und enthalten Stolzieren. Alles funktionierte gut, bis ich eingeführt, eine Methode, die ohne explizit definieren Sie die HTTP-Aktion:
public class ErrorController : Controller
{
[Route("/error")]
public IActionResult Index()
{
return StatusCode(500, new Error("Internal error."));
}
}
Wenn ich die app mit dieser Methode, wird die folgende Meldung auftauchte:
Fehler beim laden der API-definition.
Fehler
Fetch-Fehler Interner Server-Fehler /swagger/v1/swagger.json
Sobald ich explizit festlegen, z.B. [HttpGet]
der Fehler verschwindet. Das problem dabei ist, ich brauche diese Methode, um Feuer für alle möglichen HTTP-Operationen.
Natürlich, ich könnte angeben, alle Operationen, die ausdrücklich, aber ich habe das Gefühl, Swagger sollte in der Lage sein, dies richtig verarbeiten.
Warum kommt Swagger auf diese Weise Verhalten?
Gibt es eine Konfiguration, die ich verwenden kann?
Können Sie teilen Sie Ihre Swashbuckle-Konfiguration?
in diesem Fall ist der
Error
Endpunkt verwendet, da der exception-handler. Abhängig von der HTTP-Betrieb der Anfrage, die gemäß Vorgang auf der Error
Endpunkt genannt.die config ist ziemlich straight-forward:
services.AddSwaggerGen(c => { c.SwaggerDoc("v1", new Info { Title = "My Service", Version = "v1" }); }); app.UseSwagger(c => { c.PreSerializeFilters.Add((swagger, httpReq) => swagger.Host = httpReq.Host.Value); }); app.UseSwaggerUI(c => { c.RoutePrefix = "swagger"; // serve the UI at root c.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs"); });
Ich es geschafft, reproduzieren das Problem, sieht aus wie ein Bug in der Swashbuckle.AspNetCore, die
ResolveConflictingActions
sollte funktionierenInformationsquelleAutor Ash | 2018-05-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die option ResolveConflictingActions sollte die Arbeit an diesem Fall...
Hier ist der eigentliche Fehler:
Kommt von:
https://github.com/domaindrivendev/Swashbuckle.AspNetCore/blob/master/src/Swashbuckle.AspNetCore.SwaggerGen/Generator/SwaggerGenerator.cs#L90
Ich denke, dies ist ein Fehler, wenn Sie wirklich interessiert, sollten Sie sich melden, um das Projekt
InformationsquelleAutor Helder Sepulveda
Hinzufügen Httpxxx (
[HttpGet]
,[HttpPost]
, ...) - Attribut für jeden Action-Methode, oder[ApiExplorerSettings(IgnoreApi = true)]
InformationsquelleAutor LiKui
Ich weiß nicht, ob dies behoben wurde oder nicht, aber einen Weg, den Sie gehen können, über diese ist durch die Dekoration der Methode mit:
Dadurch wird sichergestellt, dass die Methode in Frage ignoriert wird von Swagger.
InformationsquelleAutor Moshood Aminu
Swagger wirft die gleiche Ausnahme, wenn es öffentliche Methoden, die nicht von Aktionen in einem controller. Die zu beheben ist, um alle von Ihnen
protected
oderprivate
oder wie bereits erwähnt das Attribut hinzufügen[ApiExplorerSettings(IgnoreApi = true)]
.protected
.InformationsquelleAutor Elphas Tori
Andere mögliche Problem ist, dass der Endpunkt muss komplett von der domain-root.
Hatte ich:
Musste ich nutzen:
InformationsquelleAutor Erick
In ASP.NET Core, wenn es ein controller Endpunkt wie:
Diese kann auch fehlschlagen, mit Abruf fehlgeschlagen. Die Lösung ist so etwas wie
Gleiche gilt für die HttpPost.
InformationsquelleAutor dansc
War ich immer ein
TypeLoadException
auf eine Klasse, die ich war löschen, der war unbenutzt. Das Update in meinem Fall war das löschen der bin/obj/Debug-Ordner Inhalt. Saubere Lösung + rebuild-Lösung nicht fix für mich.InformationsquelleAutor daniel.caspers
War ich auch immer diese Fehlermeldung, weil ich einen controller erstellt, welche dosent haben
[Route("api/[controller]")]
. Nachdem er es, der Fehler ging Weg.InformationsquelleAutor t-prisar