Skip to main content
 首页 » 编程设计

c#之为模型绑定(bind)到集合类型指定相等比较器

2024年01月29日26lexus

我有一个 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),但只有当您在多个地方需要它时才值得付出努力。