webentwicklung-frage-antwort-db.com.de

Swagger-Benutzeroberfläche - "TypeError: Abrufen fehlgeschlagen" bei gültiger Antwort

Ich habe gerade den neuesten Swagger aus dem Git-Repo (3.0.19) heruntergeladen und meine API für die Verwendung aktualisiert: https://github.com/swagger-api/swagger-ui.git die neue version.

Ran git describe --tags zu bestätigen und meine Version ist derzeit: v3.0.19-6-gaab1403

Das Problem, das ich habe, ist eines beschrieben hier , wobei meine Antwort eine 403 ist (ich kann dies im Inspektor des Browsers sehen) und obwohl ich eine Antwort auf Fehler 403 habe, bekomme ich immer noch die TypeError: Failed to fetch Botschaft.

enter image description here

enter image description here

Hier ist ein Ausschnitt aus meiner Definition bezüglich der 403-Antwort:

                    "403": {
                    "description": "Forbidden",
                    "headers": {
                        "Access-Control-Allow-Origin": {
                            "type": "string"
                        }
                    }
                },

Ich habe auch bemerkt, dass es gemeldet wurde hier Ich weiß jedoch, dass es kein CORS-Problem ist, da ich die Endpunkte getestet habe und die OPTIONEN korrekt zurückgegeben werden, ebenso wie die Endpunkte, wenn sie mit gültigen Informationen aufgerufen werden (ich erzwinge dies) 403).

Könnte mich bitte jemand in die richtige Richtung weisen?

Update: Ich habe seitdem eine 401-Antwort mit der gleichen Antwort getestet.

enter image description here

Und dass ein 400er wie erwartet funktioniert:

enter image description here

12
Hexie

Für alle, die auf dieses Problem stoßen;

Nach einem Tag der Fehlerbehebung und dem Hinweis des Swagger-Supports in die richtige Richtung hat sich herausgestellt, dass dies derzeit durch einen Fehler in den benutzerdefinierten AWS API Gateway-Autorisierern verursacht wird.

Wir verwenden derzeit AWS API Gateway für die Verwaltung unserer APIs. Dazu gehört auch die Verwaltung aller Berechtigungen über einen benutzerdefinierten Autorisierer. Das Problem ist, dass benutzerdefinierte Autorisierer derzeit die Weitergabe von Kopfzeilen in der Antwort nicht unterstützen und die Swagger-Benutzeroberfläche das Access-Control-Allow-Origin:* in den Antwort-Headern, um den korrekten HTTP-Statuscode anzuzeigen.

Siehe diesen AWS-Thread zu dem Problem (das bereits älter als ein Jahr ist):

https://forums.aws.Amazon.com/thread.jspa?messageID=728839

Swagger UI Diskussion auf dem gleichen: https://github.com/swagger-api/swagger-ui/issues/34

EDIT/UPDATE

Dies wurde seitdem mit der Verwendung von Gateway-Antworten behoben. Siehe dasselbe Forum (Seite 2):

https://forums.aws.Amazon.com/thread.jspa?messageID=728839

10
Hexie

Ich habe diesen Fehler während der lokalen Entwicklung festgestellt (d. H. Ich hatte nichts mit AWS zu tun). Die zugrunde liegende Ursache (CORS-Verletzung) ist identisch. Das Folgende kann anderen helfen, die auf dieses Problem stoßen.

Ich richte connexion mit einer openapi-Spezifikation ein, die sich auf http: // localhost: 9090 / bezog. Wenn der Entwicklungsserver gestartet wird, wird "Running on http://0.0.0.0:9090/ " angezeigt. Diese Seite scheint zu funktionieren, aber die Swagger-Benutzeroberfläche verwendet http: // localhost: 9090 / aus der OpenAPI-Spezifikation für nachfolgende Anforderungen und zeigt TypeError: Failed to fetch in Ergebnissen. Die Browserkonsole zeigt Access to fetch at 'http://localhost:9090/vr/variation' from Origin 'http://0.0.0.0:9090'. Der angegebene Befehl curl hat problemlos funktioniert. Obwohl zunächst verwirrend, ist der Erfolg des Einrollens ein Hinweis darauf, dass das Problem eher auf die Blockierung des Browsers als auf einen Ausfall des Servers zurückzuführen ist.

(Connexion basiert auf Python flask und bietet erweiterte Unterstützung für die OpenAPI-Integration.)

5
Reece

Da das Problem der Herkunftsübergreifenden Verwendung bedeutet, dass Ihre Website entweder lokal oder mit Port 8000 oder einem anderen Port gehostet wird und die Portnummer Ihres Swaggers unterschiedlich ist, ist dieses Problem echt. Wir können das Problem mit Erlaubnis beheben.

Hier ist der Knotencode:

app.use( (request, response, next) => {
    response.header("Access-Control-Allow-Origin", "*");
    response.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
    next();
});

Wir können dies auch mit CORS npm lösen. https://www.npmjs.com/package/cors

1
Chandan Gupta

Haftungsausschluss: - Diese Antwort gilt für APIs, die mit Asp.net Core entwickelt wurden.

Beim Versuch, über den Swagger-UI-Editor auf die APIs zuzugreifen, ist ein ähnliches Problem aufgetreten. Ich habe versucht, auf einige APIs zuzugreifen, die mit Asp.net Core entwickelt wurden, als der Swagger UI Editor auf Apache gehostet wurde. Ich stand CORS (Cross Orgin Request) gegenüber.

Ich muss meinen API-Code ändern, um eine CORS-Anforderung mit folgendem Code zuzulassen: - In der Datei Startup.cs mit der Klasse "StartupShutdownHandler" deklarieren.

private readonly string MyAllowSpecificOrigins = "_myAllowSpecificOrigins";

Ein Codeabschnitt in der ConfigureServices-Methode wurde hinzugefügt.

var str = ConfigurationHandler.GetSection<string>(StringConstants.AppSettingsKeys.CORSWhitelistedURL);
        if (!string.IsNullOrEmpty(str))
        {
            services.AddCors(options =>
            {
                options.AddPolicy(MyAllowSpecificOrigins,
                builder =>
                {
                    builder.WithOrigins(str);
            });
            });
        }

Codezeile in Configure Method hinzugefügt.

 app.UseCors(MyAllowSpecificOrigins);

Referenz Cross-Origin Requests (CORS) in ASP.NET Core aktivieren

1
hellowahab