Kann nicht von Dateiproblemen in der Swagger-Benutzeroberfläche lesen

70

Ich habe die Swagger-Benutzeroberfläche in meine Anwendung aufgenommen.

Wenn ich versuche, die Swagger-Benutzeroberfläche zu sehen, erhalte ich die Dokumentation der API gut, aber nach einiger Zeit wird auf der Schaltfläche ein Fehlersymbol angezeigt.

Die Fehlermeldung lautet wie folgt:

[{"level": "error", "message": "Kann nicht aus der Datei http: // MYIP / swagger / docs / v1 lesen "}]

Ich bin nicht sicher, was es verursacht. Wenn ich aktualisiere, funktioniert es und zeigt nach einigen Sekunden einen Fehler an.

Abi P.
quelle

Antworten:

97

Ich vermute, dass " http: // MYIP / swagger / docs / v1 " nicht öffentlich zugänglich ist.

Standardmäßig verwendet swagger ui einen Online-Validator: online.swagger.io. Wenn es nicht auf Ihre Swagger-URL zugreifen kann, wird diese Fehlermeldung angezeigt.

Mögliche Lösungen:

  1. Validierung deaktivieren:

    config.EnableSwagger().EnableSwaggerUi(c => c.DisableValidator());

  2. Machen Sie Ihre Website öffentlich zugänglich

  3. Hosten Sie den Validator lokal:

Den Validator erhalten Sie unter: https://github.com/swagger-api/validator-badge#running-locally

Sie müssen swaggerui auch den Standort des Validators mitteilen

config.EnableSwagger().EnableSwaggerUi(c => c.SetValidatorUrl(<validator_url>));

Jon R.
quelle
3
Können Sie bitte angeben, in welcher Datei wir den Validator so konfigurieren können, dass er deaktiviert wird?
Shashi009
3
Das hängt davon ab, welches Framework Sie verwenden. Zum Beispiel mit Web Api 2 in Startup.cs: public void Configuration(IAppBuilder app) { ... HttpConfiguration config = new HttpConfiguration(); SwaggerConfig.Register(config); } Dann könnte der Validator in SwaggerConfig.cs
Jon R
Für die nächste Person - als ich das Validator-Badge heruntergeladen und lokal ausgeführt habe, stellte ich fest, dass mein Prahler-Json gültig war. Der Fehler war, dass meine swagger.json nicht remote verfügbar ist (was ich [und wahrscheinlich Sie] wollen).
Ryan Shillington
1
Konfigurationsdatei ist verfügbar in. \ App_Start \ SwaggerConfig.cs
Vijai
Gibt es eine Möglichkeit, dies zu beheben, wenn ich das öffentlich verfügbare Docker-Image von swagger ui verwende?
Revolverheld
18

Um die akzeptierte Antwort zu ergänzen ... habe ich nur eine Zeile in der SwaggerConfig.cs auskommentiert. Ich wollte den roten Fehler auf der Haupt-Prahlerseite nur durch Deaktivieren des Validators beseitigen.

// By default, swagger-ui will validate specs against swagger.io's online validator and display the result
// in a badge at the bottom of the page. Use these options to set a different validator URL or to disable the
// feature entirely.
//c.SetValidatorUrl("http://localhost/validator");
c.DisableValidator();
Justin Pavatte
quelle
1
Danke für das Teilen !
Harmeet Singh Bhamra
Wo finde ich die Swagger-Konfiguration?
An-Droide
Ich verwende das Swashbuckle NuGet-Paket für Swagger und SwaggerConfig.cs wird in den Ordner App_Start gestellt.
Justin Pavatte
Konfigurationsdatei ist verfügbar in. \ App_Start \ SwaggerConfig.cs
Vijai
7

Wenn Sie Dateien von verwenden swagger-uiGitHub Repo, dann können Sie Schemavalidierung von Ihrer deaktivieren index.htmlDatei , indem Sie validatorUrlauf nulldarin:

window.onload = function() {

  // Build a system
  const ui = SwaggerUIBundle({
    url: "/docs/open_api.json",
    dom_id: '#swagger-ui',

    validatorUrl : null,   # <----- Add this line

    deepLinking: true,
    presets: [
      SwaggerUIBundle.presets.apis,
      SwaggerUIStandalonePreset
    ],
    plugins: [
      SwaggerUIBundle.plugins.DownloadUrl
    ],
    layout: "StandaloneLayout"
  })
Atul Vaibhav
quelle
Dies ist genau die Lösung, die ich brauchte. Vielen Dank.
Melloware
1

Einstellung this.model.validatorUrl = null;in dist/swagger-ui.jsfür mich gearbeitet ..

// Default validator
if(window.location.protocol === 'https:') {
  //this.model.validatorUrl = 'https://online.swagger.io/validator';
  this.model.validatorUrl = null;
} else {
  //this.model.validatorUrl = 'http://online.swagger.io/validator';
  this.model.validatorUrl = null;
}
bobbyrne01
quelle
0

Für alle, die ähnliche Probleme bei der Verwendung von Swashbuckle.OData haben:

Ich hatte Probleme, Swagger in unsere OData-Endpunkte zu integrieren (unter Verwendung von ODataController für API und Swashbuckle.OData NuGet-Paket). Ich musste unseren eigenen Dokumentfilter dafür schreiben und hinzufügen:

GlobalConfiguration.Configuration
            .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "OurSolution.API");
                    c.DocumentFilter<SwaggerDocumentFilter>();
                    //c.CustomProvider((defaultProvider) => new ODataSwaggerProvider(defaultProvider, c, GlobalConfiguration.Configuration));
                    c.IncludeXmlComments(GetXmlCommentsPath());
                    c.UseFullTypeNameInSchemaIds();
                    c.RootUrl(req => ConfigurationManager.AppSettings["AppUrl"]);
                })
            .EnableSwaggerUi(c =>
            {
                c.DisableValidator();
            });

Anscheinend musste ich eine Zeile auskommentieren, in der ODataSwaggerProvider eingestellt ist, um Validierungsfehler zu vermeiden und der Validator wird, wie in den obigen Beiträgen erwähnt. Dies macht die Nützlichkeit von Swashbuckle.OData fraglich, aber ich habe nicht getestet, was auch immer mit Vanille-Swashbuckle funktioniert.

Hinweis: Ich habe den auf der GitHub-Seite beschriebenen Ansatz für Swashbuckle.OData verwendet, aber er hat nicht funktioniert: Es wurden überhaupt keine möglichen Endpunkte angezeigt. Vielleicht kennt jemand eine bessere Lösung.

Diomos
quelle