我有一个 API,您可以在其中指定要获取的名称列表。不允许重复名称,如果两个名称仅在大小写上不同,则它们被视为重复。
GET /api/people?names=john&names=alice
在我自己的 .NET 代码中,我会使用自定义相等比较器将所有这些名称收集到 HashSet
中。
var names = new HashSet<string>(StringComparer.OrdinalIgnoreCase);
但我认为 ASP.NET Core 模型绑定(bind)不够灵活。
// 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>
在方法头中,然后根据您的规则将其加载到 HashSet 中:
public GetPeople([FromQuery] List<string> names)
{
var hashed = new HashSet<string>(names, StringComparer.OrdinalIgnoreCase);
}
作为替代方案,您可以查看自定义模型绑定(bind),但只有当您在多个地方需要它时才值得付出努力。
关于c# - 为模型绑定(bind)到集合类型指定相等比较器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51609798/