首页 文章

自定义swagger ui以分离文档

提问于
浏览
1

我使用swashbuckle 5.x和swashbuckle-Odata将swagger集成到我的Web API / OData项目中 . 如果我导航到http://root_url/swagger,我可以在一个大列表中看到所有可用的API文档 . 每件事情都很好,但我已经给了 list of Odata controllers and API(s) ,我需要 show in a separate list . 我知道这是我需要做的事情,为swagger创建一个自定义index.html并注入swaggerconfig.cs之类的

c.CustomAsset("index", thisAssembly, "SwaggerUI_Config.SwaggerExtensions.index.html");

我一直在互联网上研究如何分离swagger文档,以便我可以创建一个不同的HTML列表并实现我的结果,到目前为止没有运气 . 有没有人做过类似的事情?你能给我一些我需要开始的建议或指针吗?

我试图在我的招摇文档上实现以下结构 .

+ Custom API list
  +API Controller #1
   > GET API
   > POST API
   > PUT API
   > DELETE API
  +API Controller #2
   > GET API
   > POST API
   > PUT API
   > DELETE API

+ All available API(s)
  +API Controller #1
   > GET API
   > POST API
   > PUT API
   > DELETE API
  +API Controller #2
   > GET API
   > POST API
   > PUT API
   > DELETE API
  +API Controller #3
   > GET API
   > POST API
   > PUT API
   > DELETE API

2 回答

  • 0

    您可能希望使用Swagger提供的带有标签属性的@Api注释 . 它将按照您希望的方式在swagger UI仪表板上组织您的API . 例如 .

    @Path("apiController1")
    @Api(value = "/apiController1", tags = "API CONTROLLER 1")
    @Produces({
            MediaType.APPLICATION_JSON
    })
    public class APIController1 {
    
        @GET
        @Path("fooGet")
        public final String fooGet() {
            return "Hello, World";
        }
    }
    

    在其他一些控制器中 .

    @Path("apiController2")
    @Api(value = "/apiController2", tags = {
            "API CONTROLLER 2", "DEFAULT"
    })
    @Produces({
            MediaType.APPLICATION_JSON
    })
    public class APIController2 {
    
        @GET
        @Path("fooGet2")
        public final String fooGet2() {
            return "Hello, World";
        }
    }
    

    并且Swagger UI仪表板将如下所示 .
    enter image description here

  • 1

    我可能误解了您的要求,但您应该能够使用SwaggerConfig.cs中的 EnableSwagger 调用中的 GroupActionsBy 方法对您的操作进行分组:

    c.GroupActionsBy(apiDesc =>
    {
        string controllerName = apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName;
        string method = apiDesc.ActionDescriptor.SupportedHttpMethods.First().Method;
    
        return string.Format("{0} {1} API", controllerName, method);
    }
    

相关问题