2017-09-27 3 views
1

Ich versuche, eine Umleitung zu arbeiten, um/Docs anstelle von/swagger-ui zu verwenden. Ich habe den Handler implementiert (im Prinzip kopiert von OpenApiFeature.cs), um den/docs-Pfad und den Server/swagger-ui-Inhalt abzufangen, aber er funktioniert nur mit/docs /, not/docs. Mit/docs, die alle die CSS und JS-Dateien an die Wurzel lösen anstelle des/docs-Ordner (Host/blah.js statt Host/docs/blah.js):ServiceStack globale Anfrage Umleitung

appHost.CatchAllHandlers.Add((httpMethod, pathInfo, filePath) => 
{ 
    IVirtualFile indexFile = null; 

    switch (pathInfo.ToLower()) 
    { 
     case "/docs": 
     case "/docs/": 
     case "/docs/default.html": 
      indexFile = appHost.VirtualFileSources.GetFile("/swagger-ui/index.html"); 
      break; 
     default: 
      indexFile = null; 
      break; 
    } 

    if (indexFile != null) 
    { 
     var html = indexFile.ReadAllText(); 

     return new CustomResponseHandler((req, res) => 
     { 
      res.ContentType = MimeTypes.Html; 
      return html; 
     }); 
    } 
    return pathInfo.StartsWithIgnoreCase("/docs") ? new StaticFileHandler(pathInfo.ReplaceFirst("/docs", "/swagger-ui")) : null; 
}); 

Um dies zu beheben, dachte ich, ich konnte einfach/docs umleiten zu/docs /:

 case "/docs": 
     return new RedirectHttpHandler() {RelativeUrl = "/docs/"}; 

Das Problem mit diesem ist es stuft auch die Verbindung von https irgendwie http. Da es sich um eine relative Weiterleitung handelt, bin ich mir nicht sicher, was dort vor sich geht. Gibt es einen besseren Weg, dies zu implementieren? Um es noch schlimmer zu machen, funktioniert es auf meiner lokalen Dev-Maschine, aber nicht in unserer Testumgebung. Beide laufen als eigenständige SS. Natürlich gibt es eine andere Einstellung, aber ich kann mir nicht wirklich vorstellen, was das verursachen würde.

Ich vermisse wahrscheinlich etwas Dummes, aber ich kann es einfach nicht finden. Gibt es eine neuere Einstellung, um dies einfacher out-of-the-box zu machen? Irgendwelche Ideen?

Antwort

0

ServiceStack wird umschreiben die URL enthält http oder https auf der eingehenden Anfrage abhängig, die Sie https Links zwingen können durch Config.UseHttpsLinks=true Einstellung zu verwenden, auch die einfachste Möglichkeit, eine Umleitung hinzuzufügen, ist es in dem Config.RedirectPaths zusammen das sieht aus wie :

SetConfig(new HostConfig { 
    UseHttpsLinks = true, 
    RedirectPaths = { 
     { "/docs", "/swagger-ui/" }, 
    } 
}); 

Hinweis: wenn Sie einen Proxy verwenden, das die hTTPS-SSL-Verbindung ist beendet es ideal konfiguriert werden, sollte die X-Forwarded-Proto: https HTTP-Request-Header so Downstream-App-Server bestimmen kann eingestellt werden, ob die ursprüngliche Anfrage über https gesendet wurde.

Verwandte Themen