2016-12-08 9 views
0

プロダクションに行くときにスワッガーUIから隠すことができるサービスがありますが、localhostで実行すると表示されることがあります。Swaggerでサービスを非表示にする

EX:

/// <summary> 
    /// GET: .../api/SomeController/{id: int} 
    /// </summary> 
    /// <param name="id">int</param> 
    /// <returns></returns> 
public IHttpActionResult SomeService(int id) { return Ok();} 

私は私の環境で実行していると私はなど、そのサービスのマニュアルを参照してくださいますUI localhost:12345/swagger/ui/indexを闊歩して行く、 が、私はhttp://someDomain/swagger/ui/index上だとき、私はそれを見ることはありませんよ。

私はドキュメントを見てきましたが、これに関連するものは見つかりませんでした。

ありがとうございます。

答えて

1

独自の属性を作成し、そのメソッドまたは全部コントローラ闊歩から除外するためにそれを使用することができます。その後、

[AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)] 
public class HideInDocsAttribute:Attribute 
{ 
} 

そして:

public class HideInDocsFilter:IDocumentFilter 
{ 
    public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer, IHostingEnvironment env) 
    { 
     if(env.IsEnvironment("Production")) { 
      foreach (var apiDescription in apiExplorer.ApiDescriptions) 
      { 
       if (!apiDescription.ActionDescriptor.ControllerDescriptor.GetCustomAttributes<HideInDocsAttribute>().Any() && !apiDescription.ActionDescriptor.GetCustomAttributes<HideInDocsAttribute>().Any()) continue; 
       var route = "/" + apiDescription.Route.RouteTemplate.TrimEnd('/'); 
       swaggerDoc.paths.Remove(route); 
      } 
     }    
    } 
} 
関連する問題