为同一API创建了多个文档

时间:2017-01-18 18:59:09

标签: c# asp.net-web-api swagger

在我的项目中,我按如下方式配置路由:

config.Routes.MapHttpRoute(
    name: "ApiLogin",
    routeTemplate: "Api/Default/{controller}/{action}",
    defaults: new { action = "Get" }
);

config.Routes.MapHttpRoute(
    name: "ApiByAction",
    routeTemplate: "Api/{controller}/{action}",
    defaults: new { action = "Get" },
    constraints: null,
    handler: sessionHandler
);

一个路由不使用HttpMessageHandler而另一个路由不使用Swagger

使用.bat生成文档时,它的生成重复(每个路由一个)。

有没有办法抑制某些路由?

1 个答案:

答案 0 :(得分:1)

我假设您使用的是Swashbuckle,我不是它的专家。我在github上关注了这个discussion并提出了以下解决方案。您需要创建以下类:

public class FilterRoutesDocumentFilter : IDocumentFilter
{  
     public void Apply(SwaggerDocument swaggerDoc, SchemaRegistry schemaRegistry, IApiExplorer apiExplorer)
     {
          var keys = swaggerDoc.paths.Keys.Where(x => x.Contains("/api/Default/")).ToList();

           foreach (var key in keys)
               swaggerDoc.paths.Remove(key);
     }
}

然后在SwaggerConfig.cs中添加以下行:

.EnableSwaggerUi(c => { c.DocumentFilter<FilterRoutesDocumentFilter>(); }

似乎工作正常。希望这会有所帮助。