it-swarm.com.de

.NET Core 2 und SwashBuckle Swagger-Benutzeroberfläche wird nicht angezeigt

Ich habe ein paar Tutorials befolgt und habe dies zur Arbeit gebracht, aber aus irgendeinem Grund kann ich die Benutzeroberfläche nicht zur Anzeige bringen, aber der Swagger Json wurde erstellt. Das letzte Tutorial, das ich mir angesehen habe, ist hier .

Mein Setup ist wie folgt:

Nuget-Paket:Swashbuckle.AspNetCore(1.0.0)

ConfigureServices Methode: 

services.AddSwaggerGen(options =>
            {
                options.SwaggerDoc("v1",
                    new Info
                    {
                        Title = "MediatR Example",
                        Version = "v1",
                        Description = "Trying out the MediatR library to simplify Request and Response logic.",
                        TermsOfService = "WTFPL",
                        Contact = new Contact
                        {
                            Email = "",
                            Name = "",
                            Url = "https://github.com/CubicleJockey/MediatR-Playground"
                        }
                    }
                );

                var xmlDocFile = Path.Combine(PlatformServices.Default.Application.ApplicationBasePath, @"MediatR-Messages.Api.xml");
                options.IncludeXmlComments(xmlDocFile);
                options.DescribeAllEnumsAsStrings();
            });

Configure Methode:

 app.UseMvcWithDefaultRoute();

            // Enable middleware to serve generated Swagger as a JSON endpoint.
            app.UseSwagger();

            // Enable middleware to serve swagger-ui (HTML, JS, CSS etc.), specifying the Swagger JSON endpoint
            app.UseSwaggerUI(config =>
            {
                config.SwaggerEndpoint("/swagger/v1/swagger.json", "V1 Docs");
            });

launchSettings.json:

"IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "swagger/",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },

Beim Ausführen und Besuchen der Swagger-JSON-URL wird der entsprechende JSON-Code erzeugt:

   {
   "swagger":"2.0",
   "info":{
      "version":"v1",
      "title":"MediatR Example",
      "description":"Trying out the MediatR library to simplify Request and Response logic.",
      "termsOfService":"WTFPL",
      "contact":{
         "name":"André Davis",
         "url":"https://github.com/CubicleJockey/MediatR-Playground",
         "email":"[email protected]"
      }
   },
   "basePath":"/",
   "paths":{
      "/api/Addition":{
         "get":{
            "tags":[
               "Addition"
            ],
            "summary":"Get Methods that takes two numbers and gets the sum.",
            "operationId":"ApiAdditionGet",
            "consumes":[

            ],
            "produces":[
               "text/plain",
               "application/json",
               "text/json"
            ],
            "parameters":[
               {
                  "name":"left",
                  "in":"query",
                  "description":"Left hand side of the equation.",
                  "required":false,
                  "type":"integer",
                  "format":"int32"
               },
               {
                  "name":"right",
                  "in":"query",
                  "description":"Right hand side of the equation.",
                  "required":false,
                  "type":"integer",
                  "format":"int32"
               }
            ],
            "responses":{
               "200":{
                  "description":"Success",
                  "schema":{
                     "$ref":"#/definitions/Task[AdditionResponse]"
                  }
               }
            }
         }
      }
   },
   "definitions":{
      "Task[AdditionResponse]":{
         "type":"object",
         "properties":{
            "result":{
               "$ref":"#/definitions/AdditionResponse",
               "readOnly":true
            },
            "id":{
               "format":"int32",
               "type":"integer",
               "readOnly":true
            },
            "exception":{
               "type":"object",
               "readOnly":true
            },
            "status":{
               "enum":[
                  "Created",
                  "WaitingForActivation",
                  "WaitingToRun",
                  "Running",
                  "WaitingForChildrenToComplete",
                  "RanToCompletion",
                  "Canceled",
                  "Faulted"
               ],
               "type":"string",
               "readOnly":true
            },
            "isCanceled":{
               "type":"boolean",
               "readOnly":true
            },
            "isCompleted":{
               "type":"boolean",
               "readOnly":true
            },
            "isCompletedSuccessfully":{
               "type":"boolean",
               "readOnly":true
            },
            "creationOptions":{
               "enum":[
                  "None",
                  "PreferFairness",
                  "LongRunning",
                  "AttachedToParent",
                  "DenyChildAttach",
                  "HideScheduler",
                  "RunContinuationsAsynchronously"
               ],
               "type":"string",
               "readOnly":true
            },
            "asyncState":{
               "type":"object",
               "readOnly":true
            },
            "isFaulted":{
               "type":"boolean",
               "readOnly":true
            }
         }
      },
      "AdditionResponse":{
         "type":"object",
         "properties":{
            "answer":{
               "format":"int32",
               "type":"integer",
               "readOnly":true
            },
            "equation":{
               "type":"string",
               "readOnly":true
            }
         }
      }
   },
   "securityDefinitions":{

   }
}

Beim Besuch der standardmäßigen Swagger-UI-URL bekomme ich eine 404. Ich habe ein paar Variationen versucht.

  1. localhost: 64881/swagger /
  2. localhost: 64881/swagger/ui
  3. localhost: 64881/swagger/index.html
  4. localhost: 64881/swagger/ui/index.html

Alle oben genannten geben 404 zurück. Diese haben je nach Version bereits funktioniert. Was vermisse ich. 

Den vollständigen Quellcode finden Sie auf GitHub hier . Dies ist ein Zweig für diese Frage, daher entspricht der Code meiner Anfrage.

7
Cubicle.Jockey

Was hat der Trick für mich getan:

  1. Löschen Sie alle alten Dateien aus Ihrem Implementierungsordner (Ich habe es mit IIS versucht, funktioniert auch für andere Hosting-Typen)
  2. Ersetzen Sie alle Microsoft.AspNetCore.*-Pakete durch Microsoft.AspNetCore.All-Metapaket - siehe diesen Beitrag für Details.
  3. [optional] Nur für die Nebenwirkungen muss das Swashbuckle.AspNetCore-Paket erneut installiert werden (keine anderen Swashbuckle.AspNetCore.*-Pakete erforderlich)
  4. Vergewissern Sie sich, dass diese 2 Pakete in der Projektdatei enthalten sind (es reicht aus, damit es funktioniert):

    • PackageReference Include="Microsoft.AspNetCore.All" Version="2.0.0"
    • PackageReference Include="Swashbuckle.AspNetCore" Version="1.0.0" 
  5. Veröffentlichen Sie die Datei (oder verteilen Sie sie durch Kopieren der Dateien) in Ihrem Bereitstellungsordner ..__ Nun sollte es funktionieren. 

ANMERKUNG: Manchmal schlägt der Vorgang fehl (in diesem Fall werden einige unklare Fehler im Browser angezeigt), wenn Sie Modellnamen in Ihrer API duplizieren;) 

7
Dmitry Pavlov

Nachdem Sie den Code heruntergeladen und getestet haben, müssen Sie das folgende NuGet-Paket zu Ihrem Projekt hinzufügen:

Microsoft.AspNetCore.StaticFiles

Sie können dies über den NuGet Manager oder durch Hinzufügen der folgenden Zeile zu Ihrem .csproj <ItemGroup> tun.

<PackageReference Include="Microsoft.AspNetCore.StaticFiles" Version="2.0.0" /> 

Quelle: https://github.com/domaindrivendev/Swashbuckle.AspNetCore/issues/438

10
Kyle Polansky

Versuchen Sie, den .vs-Ordner zu löschen. Es wurde für mich nach dem Upgrade auf ASP.NET Core 2.1 behoben

2
Yodacheese

Ich hatte mehrere Stunden lang das gleiche Problem, benutzte aber einen Port, der von Chrome (der Text war diskret und leicht zu übersehen) als unsicher eingestuft wurde. Dies könnte sich in Zukunft für jemanden als nützlich erweisen .

0
Oisín Foley

Ich hatte das gleiche Problem, ich fehlte HttpMethod Bindung.

System.NotSupportedException: Für Aktionen ist eine explizite HttpMethod-Bindung für Swagger 2.0 erforderlich

0
Atul