2016-12-23 16 views
1

私はSwagger(Web API)プロジェクトに取り組んでいます。
初めてアプリケーションを実行すると、Swagger UIのログインページが表示されます。
ユーザーはまずSwagger UIページにアクセスするためにログインする必要がありますが、ユーザーが直接「http://example.com/swagger/ui/index」と入力するとSwagger UIページにアクセスできます。/swagger/ui/indexページに認証を追加する - Swagger | Web API | Swashbuckle

afaik swagger-uiはスワッシュバックルアセンブリによって提供されます。私のプロジェクトではソースが利用できません。

Swagger UIページにログインしていないユーザーは、ログインページにリダイレクトできますか?

答えて

2

最後に、私はDelegtingHandlerでそれを解決し、ここで私はそれをやった方法です見に闊歩UIをロックダウンする方法について説明します。このリンクを取ることができます:
ファイルSwaggerAccessMessageHandler.csを作成し、App_Startフォルダに追加します。ただ、次のように闊歩を有効にする前にSwaggeConfig.csでハンドラアップ

using System; 
using System.Net; 
using System.Net.Http; 
using System.Threading; 
using System.Threading.Tasks; 
public class SwaggerAccessMessageHandler : DelegatingHandler 
{ 
    protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) 
    { 
     if (IsSwagger(request) && !Thread.CurrentPrincipal.Identity.IsAuthenticated) 
     { 
      HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.Redirect); 
      // Redirect to login URL 
      string uri = string.Format("{0}://{1}", request.RequestUri.Scheme, request.RequestUri.Authority);  
      response.Headers.Location = new Uri(uri); 
      return Task.FromResult(response); 
     } 
     else 
     { 
      return base.SendAsync(request, cancellationToken); 
     } 
    } 

    private bool IsSwagger(HttpRequestMessage request) 
    { 
     return request.RequestUri.PathAndQuery.Contains("/swagger"); 
    } 
} 

次に、ワイヤー:

GlobalConfiguration.Configuration.MessageHandlers.Add(new SwaggerAccessMessageHandler()); 

GlobalConfiguration.Configuration.EnableSwagger(c => 
{ 
    ... 
}); 
+0

ページが正しくリダイレ​​クトされていません – moudrick

関連する問題