Swashbuckle自定义字符串比较器未应用于操作的订单组

时间:2015-11-12 23:12:23

标签: swagger swagger-ui icomparer swagger-2.0 swashbuckle

在Swashbuckle有一个叫OrderActionGroupsBy设置这是应该改变API中的排序,但没有我做的工作,我不能确定这是否是一个Swashbuckle问题,或由于我的IComparer任何想法我做错了什么?

这是设置配置

       config.EnableSwagger(c =>
       {
            ...
            c.OrderActionGroupsBy(new CustomStringComparer());
            c.GroupActionsBy(apiDesc => GroupBy(apiDesc));
            ...
        }

这是按类型而不是controllerName对操作进行分组。

        private static string GroupBy(ApiDescription apiDesc)
        {
            var controllerName = apiDesc.ActionDescriptor.ControllerDescriptor.ControllerName;
            var path = apiDesc.RelativePath;

            if (controllerName.Contains("Original"))
            {
                controllerName = controllerName.Replace("Original", "");
            }
            // Check if it is one of the entities if so group by that
            // Otherwise group by controller
            var entities = new List<string>() { "Users", "Apps", "Groups" };


            var e = entities.Where(x => attr.Contains(x.ToLower())).FirstOrDefault();
            if (e != null)
            {
                return e;
            }
            return controllerName;
        }

这是我尝试IComparer我首先想要用户然后按字母顺序

        class CustomStringComparer : IComparer<string>
        {
            public int Compare(string x, string y)
            {
                if (x.CompareTo(y) == 0)
                    return 0;

                if (x.CompareTo("Users") == 0)
                    return -1;
                if (y.CompareTo("Users") == 0)
                    return 1;

                 return x.CompareTo(y);
            }
        }
    }

这不起作用,无论我做什么,它始终默认为按字母顺序排列。

1 个答案:

答案 0 :(得分:2)

看起来这是Swashbuckle / Swagger-ui的错误

使用OrderActionGroupsBy正确排序JSON文件,但随后swagger ui会自动将其按字母顺序排序。

我已经提交了Swashbuckle和swagger-ui的错误,因为这似乎违背了swagger-ui关于apisSorter的文档中所说的内容。

  

对API /标签列表应用排序。它可以是'alpha'(按名称排序)或   一个函数(请参阅Array.prototype.sort()以了解sort函数如何   作品)。默认值是服务器返回的顺序不变。

Swashbuckle issue

swagger-ui issue

swagger-ui specific stackoverflow question