2016-12-08 55 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); 
      } 
     }    
    } 
}