web-dev-qa-db-de.com

Wie kann man von Root-URL zu/swagger/ui/index umleiten?

Ich habe ein WebApi-Projekt, auf dem Swashbuckle installiert ist.

In der Standardeinstellung muss ich im Browser http://localhost:56131/swagger/ui/index öffnen, um meine Operationsbeschreibung und Testseite anzuzeigen. Ich möchte, dass es vom Stammverzeichnis der Site aus erreichbar ist: http://localhost:56131/. Wie kann ich das erreichen?

11
v.karbovnichy

Beeinflusst durch diese Antwort auf ähnliche Frage , leicht modifizierter Code:

public class WebApiConfig
{
    public static void Configure(IAppBuilder app)
    {
        var httpConfig = new HttpConfiguration();

        // Attribute routing
        config.MapHttpAttributeRoutes();

        // Redirect root to Swagger UI
        config.Routes.MapHttpRoute(
            name: "Swagger UI",
            routeTemplate: "",
            defaults: null,
            constraints: null,
            handler: new RedirectHandler(SwaggerDocsConfig.DefaultRootUrlResolver, "swagger/ui/index"));

        // Configure OWIN with this WebApi HttpConfiguration
        app.UseWebApi(httpConfig);
    }
}

Auf diese Weise ist es nicht erforderlich, einen neuen WebAPI-Controller zu erstellen.

Diese Lösung basiert auf der bereits vorhandenen Klasse RedirectHandler in Swashbuckle.Core Assembly.

27
v.karbovnichy

Wenn Sie ein Web-API-Projekt verwenden, können Sie:

[Route(""), HttpGet]
[ApiExplorerSettings(IgnoreApi = true)]
public HttpResponseMessage RedirectToSwaggerUi()
{
    var httpResponseMessage = new HttpResponseMessage(HttpStatusCode.Found);
    httpResponseMessage.Headers.Location = new Uri("/swagger/ui/index", UriKind.Relative);
    return httpResponseMessage;
}

Beachten Sie die Verwendung des ApiExplorerSettings-Attributs, damit es in der Swagger-Definition nicht angezeigt wird.

7

Noch einfachere Variante der obigen Antwort: 

public class DefaultController : Controller
{
    [Route(""), HttpGet]
    [ApiExplorerSettings(IgnoreApi = true)]
    public RedirectResult RedirectToSwaggerUi()
    {
        return Redirect("/swagger/");
    }
}

Je einfacher, desto besser! Dieser arbeitet für mich.

2
Gunnar Siréus

Ändern Sie den Wert von launchUrl = "swagger/index.html" in launchSetting.Json in asp.net core 2.1/2.2

"ProjectName": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "swagger/index.html",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "applicationUrl": "http://localhost:44333"
    }
0
San Jaisy

Ändern Sie für .net core in den Eigenschaften "launchsettings.json" die Profile und die API-Abschnitte so, dass sie auf "swagger" verweisen.

profiles": {
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "launchUrl": "api/swagger",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    },
    "authapi": {
      "commandName": "Project",
      "launchBrowser": true,
      "launchUrl": "api/swagger",
      "applicationUrl": "https://localhost:5001;http://localhost:5000",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
0
Hal Davis

wenn es die Aufgabe erlaubt, fügen Sie in _layout.chtml die folgende Zeile in head hinzu:

<meta http-equiv="refresh" content="0; URL='/swagger'" />

dadurch werden Sie nach dem Laden der Seite auf Swagger/Index umgeleitet

0
VanavaraVL