Swashbuckle 自定义字符串比较器不适用于操作顺序组
Swashbuckle custom string comparer not applied for order groups of actions
在 Swashbuckle 中有一个名为 OrderActionGroupsBy 的设置,它应该会更改 API 中的顺序,但我所做的一切都不起作用,我无法确定这是否是一个 Swashbuckle 问题,或者由于我的 IComparer 知道我做错了什么吗?
这是设置配置
config.EnableSwagger(c =>
{
...
c.OrderActionGroupsBy(new CustomStringComparer());
c.GroupActionsBy(apiDesc => GroupBy(apiDesc));
...
}
这是按类型而非控制器名称对操作进行分组。
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);
}
}
}
这是行不通的,无论我做什么,它总是默认按字母顺序排列。
看起来这是 Swashbuckle/Swagger-ui
的错误
使用 OrderActionGroupsBy 可以正确排序 JSON 文件,但 swagger ui 会自动将此排序为字母顺序。
我已经提交了 Swashbuckle 和 swagger-ui 的错误,因为这似乎与 swagger-ui 的文档中关于 apiSorter 的内容相悖。
Apply a sort to the API/tags list. It can be 'alpha' (sort by name) or
a function (see Array.prototype.sort() to know how sort function
works). Default is the order returned by the server unchanged.
swagger-ui specific Whosebug question
在 Swashbuckle 中有一个名为 OrderActionGroupsBy 的设置,它应该会更改 API 中的顺序,但我所做的一切都不起作用,我无法确定这是否是一个 Swashbuckle 问题,或者由于我的 IComparer 知道我做错了什么吗?
这是设置配置
config.EnableSwagger(c =>
{
...
c.OrderActionGroupsBy(new CustomStringComparer());
c.GroupActionsBy(apiDesc => GroupBy(apiDesc));
...
}
这是按类型而非控制器名称对操作进行分组。
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);
}
}
}
这是行不通的,无论我做什么,它总是默认按字母顺序排列。
看起来这是 Swashbuckle/Swagger-ui
的错误使用 OrderActionGroupsBy 可以正确排序 JSON 文件,但 swagger ui 会自动将此排序为字母顺序。
我已经提交了 Swashbuckle 和 swagger-ui 的错误,因为这似乎与 swagger-ui 的文档中关于 apiSorter 的内容相悖。
Apply a sort to the API/tags list. It can be 'alpha' (sort by name) or a function (see Array.prototype.sort() to know how sort function works). Default is the order returned by the server unchanged.
swagger-ui specific Whosebug question