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

标签 c# asp.net-core model-binding

我有一个 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/

相关文章:

c# - 我怎样才能提高这个 LINQ 的性能?

c# - 从 WORD 打开 XML 中删除空白页

c# - 使用测试服务器的 .NET 6 E2E 测试在 TeamCity CI 上失败,但工作手动运行

asp.net-mvc-3 - MVC3、多文件上传、模型绑定(bind)

asp.net-mvc - 具有复杂子属性的 Kendo 对象的模型绑定(bind)问题

c# - KnockOut.js 与 Asp.net mvc

c# - 如何从jquery变量后面的代码中获取属性?

asp.net-core - SignalR hub 在 ASP.NET Core 中的 RabbitMQ 订阅处理程序中解析为 null

angular - ABP (AspNet Boilerplate) API 的间歇性 CORS 策略问题

jquery - ASP.NET MVC2 和 JSON 模型绑定(bind)并验证操作方法