2016-12-08 2 views
0

есть ли способ, чтобы некоторые сервисы можно было скрывать от пользовательского интерфейса swagger при вводе в производство, но при запуске на локальном хосте?Скрытие услуг с 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); 
      } 
     }    
    } 
}