c# - 为模型绑定到集合类型指定相等比较器
问题描述
我有一个 API,您可以在其中指定要获取的名称列表。不允许重复名称,如果两个名称仅在大小写上有所不同,则它们被视为重复名称。
GET /api/people?names=john&names=alice
在我自己的 .NET 代码中,我将HashSet
使用自定义相等比较器收集所有这些名称。
var names = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
但我认为 ASP.NET Core 模型绑定不够灵活。
// GET /api/people?names=john&names=JOHN
[HttpGet("api/people")]
public GetPeople([FromQuery] HashSet<string> names)
{
// this works but names contains both john and JOHN
}
我必须更改什么以使该names
集合仅包含 john 而不是 JOHN?
解决方案
您可以List<string>
在方法头中使用 a ,然后根据您的规则将其加载到 HashSet 中:
public GetPeople([FromQuery] List<string> names)
{
var hashed = new HashSet<string>(names, StringComparer.OrdinalIgnoreCase);
}
作为替代方案,您可以查看自定义模型绑定,但只有在多个地方需要它时才值得付出努力。
推荐阅读
- terraform - Terraform 12.动态生成块
- swift - 在 SwiftUI 中修改 ForEach 中的结构数据
- automation - 解决 PythonAnywhere 中未找到模块的错误
- python-3.x - Python 子类错误
- javascript - 云功能中未定义的 GCP VM 网络接口元数据
- c++ - C++中的非成员函数和全局函数是一样的吗?
- ios - Cocoapods:[!] CocoaPods 找不到 pod "Firebase/Storage" 的兼容版本:
- swift - 如何向用户刷新问题?
- vb.net - [VB.NET]如何解析这个html?
- html - 修复了下拉菜单,但 css 样式妨碍了