2016-12-08 54 views
0

有沒有什麼辦法可以在進入產品時隱藏一些服務可以在swagger 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); 
      } 
     }    
    } 
}