2017-09-27 9 views
1

/swagger-uiの代わりに/ docsを使用するようにリダイレクトしようとしています。私はハンドラ(基本的にOpenApiFeature.csからコピー)を実装して/ docsパスとserver/swagger-uiの内容をキャッチしましたが、/ docsではなく/ docs /でのみ動作します。/docsに、すべてのCSSやJSファイルを(/ドキュメント/ blah.jsホスト/ blah.jsホストの代わりに)ルートの代わりに、/ドキュメントフォルダに解決:ServiceStackグローバルリクエストリダイレクト

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; 
}); 

は、この問題を解決するために、私は考え出しそれに伴う問題は、それがまた何らかの形でHTTPSからHTTPに接続をダウングレードである

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

:私はちょうど/ドキュメント/に/ドキュメントをリダイレクトすることができます。相対リダイレクトなので、何が起こっているのか分かりません。これを実装するより良い方法はありますか?それを悪化させるために、私のローカルのdevマシンでは動作しますが、私たちのテスト環境では動作しません。どちらもスタンドアロンSSを実行します。明らかにいくつかの異なる設定がありますが、私は実際にその原因を想像することはできません。

私はたぶん何かダムが見つからないでしょうが、私はそれを見つけることができません。これを直ちに簡単にするためのより最近の設定はありますか?何か案は?

答えて

0

ServiceStackがこのようになります一緒に、また、リダイレクトを追加する最も簡単な方法はConfig.RedirectPathsにそれを追加することで、あなたはConfig.UseHttpsLinks=trueを設定することにより、httpsリンクを使用するために強制することができ、着信要求に応じて、httpまたはhttpsを含めるようにURLをリライトします:

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

注:あなたは理想的なので、下流のアプリケーションサーバは、元の要求がhttps経由で送信されたかどうかを判断することができますX-Forwarded-Proto: https HTTPリクエストヘッダを設定するように設定する必要があります。httpsのSSL接続を終了のプロキシを使用している場合。