Aws-lambda-dotnet: Swagger-Dokumente werden bei der Integration mit dem API-Gateway verfügbar gemacht

Erstellt am 30. Jan. 2018  ·  22Kommentare  ·  Quelle: aws/aws-lambda-dotnet

Hallo Leute,

Ich habe eine .net-Core-Web-API mit eigenen Swagger-Integrationsdokumenten, die über den Endpunkt "swagger/v1/swagger.json" verfügbar gemacht werden. Es wird als Lambda bereitgestellt. Ich habe auch ein API-Gateway eingerichtet, das sich in dieses Lambda integriert, um alle APIs verfügbar zu machen.

Das Problem, das ich habe, ist, dass ich nicht über die /swagger-URL auf die Swagger-Dokumente zugreifen kann. Es gibt immer "message: forbibbden" zurück. Ich kann definitiv auf den Swagger zugreifen, wenn ich die Web-API lokal ausführe.

Irgendwelche Ideen?

Vielen Dank

Jason

guidance

Hilfreichster Kommentar

Das gleiche Problem hatte ich auch. Lösung bekommen-
Bitte stellen Sie sicher, dass Sie die Stufe in einem Namen in der Startdatei hinzugefügt haben, wie unten gezeigt. wobei Prod mein Künstlername ist.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Fordern Sie @normj auf, dies zu schließen.

Alle 22 Kommentare

Können Sie ein einfaches Repo-Repository erstellen, damit ich es mir ansehen kann?

Ich habe das gleiche Problem.

Hast du mit diesem @jasondaicoder Fortschritte gemacht?

Gleiches Problem, bitte aktualisieren Sie, wenn Sie eine Lösung finden. Ich kann direkt auf das Json zugreifen, zB .. http://eatcodelive.com/2017/05/19/change-default-swagger-route-in-an-asp-net-core-web-api/ habe ich es geändert in "Swag" und hatte immer noch das gleiche Problem.

Interessant, wenn Sie auf https://..../Prod/swagger zugreifen , werden Sie zu https://.../swagger weitergeleitet , wobei im Grunde der Bühnenteil des Pfads und zurück zum Stamm entfernt werden, was dann zum führt Nachricht verboten.

Nicht wirklich Jungs. Ich dachte, es könnte daran liegen, dass das API-Gateway nur für die Web-API, jedoch nicht für die Benutzeroberfläche verwendet werden soll. Am Ende habe ich die Benutzeroberfläche woanders gehostet, aber über das API-Gateway auf die swagger-json-Datei des Projekts verwiesen. Es klappt.

Vielen Dank. Hmm, irgendwie schmerzhaft, dies tun zu müssen :) Ich habe einen regulären MVC-Heimcontroller und eine Indexseite als Teil meiner Bereitstellung und es funktioniert gut. Ja, ich habe gerade einen Beitrag gelesen, in dem eine Person dachte, dass die Antwort nicht json war, aber meine Indexseite funktioniert gut.

Bei meiner Lösung müssen Sie die Benutzeroberfläche eigentlich nur einmal bereitstellen. Solange Sie die JSON-Datei aus Ihrem Projekt laden, müssen Sie nichts mehr tun. Wir hosten die UI-Dateien auf S3. Vielleicht kann das AWS-Team das Problem später beheben.

interessant.. Sie können eine .net-Kern-UI auf S3 bereitstellen, ohne dass ein Turmfalke läuft? Ich dachte, die Prahlerei ist eine Laufzeitsache und muss die laufenden DLLs usw. unterstützen, z. B. nicht nur ein statischer Satz von Dateien

@normj , das Projekt ist nur ein normales c#-Weapi mit Lamdba-Einstiegspunkt. Nichts wirklich besonderes. Ich werde später versuchen, ein Beispiel-Repository auf GitHub zu erstellen. Ich denke nicht, dass an meinem Projekt etwas falsch ist, um ehrlich zu sein, da andere Leute das gleiche Problem haben. Ich denke, es könnte einige Konflikte mit den integrierten Swagger-Dokumenten des API-Gateways geben.

@rslangham Nein, Sie müssen Ihr Projekt nicht bereitstellen. Alles, was Sie brauchen, ist, die statischen Dateien der Swagger-UI herunterzuladen, die Sie von der Swagger-Site erhalten können (vielleicht ein Link zu GitHub, den Sie auf der Swagger-Site finden).

@jasondaicoder danke für den Vorschlag zur Verwendung der statischen swagger ui-Dateien. Ich habe dies mit einer anderen Implementierung gemacht und es hat funktioniert. Ich habe die swagger ui-Dateien heruntergeladen und unter meinem Projekt wwwroot/swaggerui abgelegt. In der Startup.cs Configure(..) habe ich den Zugriff auf statische Dateien aktiviert, zB app.UseStaticFiles. Ich habe das eingebettete Javascript in swagger ui index.html so geändert, dass window.location.href verwendet wird, um die URL dynamisch in den richtigen Pfad für den swagger json zu ändern. Dadurch kann er überall bereitgestellt werden und funktioniert.

Würde aber wirklich gerne die richtige Lösung herausfinden :) Nochmals vielen Dank.

Hallo zusammen, ich habe genau das gleiche Problem und hoffe es wird bald behoben.

Beobachte auch das gleiche Problem.

Das gleiche Problem hatte ich auch. Lösung bekommen-
Bitte stellen Sie sicher, dass Sie die Stufe in einem Namen in der Startdatei hinzugefügt haben, wie unten gezeigt. wobei Prod mein Künstlername ist.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Fordern Sie @normj auf, dies zu schließen.

@AnandKhedkar das hat bei mir funktioniert danke

Das gleiche Problem hatte ich auch. Lösung bekommen-
Bitte stellen Sie sicher, dass Sie die Stufe in einem Namen in der Startdatei hinzugefügt haben, wie unten gezeigt. wobei Prod mein Künstlername ist.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Fordern Sie @normj auf, dies zu schließen.

Das zeigt die Seite Index.html an. Es erlaubt jedoch nicht die Ausführung des Dienstes über die Swagger-Schnittstelle für mich.
Der Pfad in der Request-URL für einen GET-Aufruf schließt Prod wieder aus.
Ich verwende jedoch c.RoutePrefix = string.Empty; , um die Seite im Stammverzeichnis zu rendern, anstatt /swagger hinzuzufügen.

Gibt es eine Eigenschaft, die festgelegt werden könnte, damit dies über alle relativen URL-Referenzen hinweg konsistent bleibt?

Das gleiche Problem hatte ich auch. Lösung bekommen-
Bitte stellen Sie sicher, dass Sie die Stufe in einem Namen in der Startdatei hinzugefügt haben, wie unten gezeigt. wobei Prod mein Künstlername ist.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Fordern Sie @normj auf, dies zu schließen.

Das zeigt die Seite Index.html an. Es erlaubt jedoch nicht die Ausführung des Dienstes über die Swagger-Schnittstelle für mich.
Der Pfad in der Request-URL für einen GET-Aufruf schließt Prod wieder aus.
Ich verwende jedoch c.RoutePrefix = string.Empty; , um die Seite im Stammverzeichnis zu rendern, anstatt /swagger hinzuzufügen.

Gibt es eine Eigenschaft, die festgelegt werden könnte, damit dies über alle relativen URL-Referenzen hinweg konsistent bleibt?

Mit dieser Lösung gelöst Funktioniert einwandfrei und zeigt sogar den Basispfad im Header der Prahlereiseite an.

Schließen, da es so aussieht, als ob die Lösung gefunden wurde.

Das gleiche Problem hatte ich auch. Lösung bekommen-
Bitte stellen Sie sicher, dass Sie die Stufe in einem Namen in der Startdatei hinzugefügt haben, wie unten gezeigt. wobei Prod mein Künstlername ist.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Fordern Sie @normj auf, dies zu schließen.
In welcher Datei dies definiert werden soll.

Das gleiche Problem hatte ich auch. Lösung bekommen-
Bitte stellen Sie sicher, dass Sie die Stufe in einem Namen in der Startdatei hinzugefügt haben, wie unten gezeigt. wobei Prod mein Künstlername ist.

app.UseSwaggerUI(c =>
              {
                  c.SwaggerEndpoint("/Prod/swagger/v1/swagger.json", "GST Console API - V1");

              });

Fordern Sie @normj auf, dies zu schließen.

das hat bei mir funktioniert.
Vielen Dank

Ich bin auf das gleiche Problem gestoßen; aber HARDCODING PROD (der Bühnenname) in den Code ist KEINE OPTION Gibt es eine Möglichkeit zu ermitteln, unter welcher API-Gateway-Bereitstellungsphase ein Lambda ausgeführt wird? eine AWS-Umgebungsvariable oder so?

@grahamehorner Hier, was ich getan habe, um das Problem ohne Hardcoding zu lösen. Es funktionierte auf meinem lokalen Computer und auf Lambda

app.UseSwaggerUI(c =>
{
  c.SwaggerEndpoint("v1/swagger.json", "GST Console API - V1");
});

Im Grunde richten Sie den Endpunkt einfach mit c.SwaggerEndpoint() indem Sie die relative Pfad-URL ohne "swagger" und führendes "/" verwenden.

Wenn wir eine relative Pfad-URL ohne führendes "/" zu c.SwaggerEndpoint() angeben, kommt die absolute Endpunkt-URL von

AWS Serverless Url + "/" + c.RoutePrefix + "/" + the supplied url

wobei c.RoutePrefix standardmäßig auf 'swagger' gesetzt ist

Wenn Ihre serverlose AWS-URL beispielsweise „ https://xyz.central.amazonaws.com/Prod “ lautet, lautet Ihre absolute URL „ https://xyz.central.amazonaws.com/Prod/swagger/v1/swagger .json '

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen