ASP.NET 5 如何为同一属性绑定多个[FromQuery]查询参数?
关于多查询参数名绑定同一属性的实现说明
原生[FromQuery]支持情况
原生ASP.NET Core提供的[FromQuery]特性无法直接实现该需求,原因有两点:
[FromQuery]的特性声明没有开启AllowMultiple = true,不允许重复标记在同一个属性上- 原生模型绑定逻辑只会读取属性上第一个
[FromQuery]配置的参数名,即使强行标记多个也不会生效
常用实现方案
方案1:新增兼容属性(推荐,无额外框架改造)
通过新增额外属性绑定旧参数名,用get/set逻辑联动目标属性即可,可自行配置参数优先级,示例代码如下:
public class SampleQueryRequestModel { // 绑定新参数名,优先级更高 [FromQuery(Name = "Product.Id")] public string ProductId { get; set; } // 兼容旧参数名 [FromQuery(Name = "ProductId")] public string LegacyProductId { get => ProductId; set => ProductId ??= value; } }
如果需要旧参数优先级更高,调整属性逻辑即可:
public class SampleQueryRequestModel { // 绑定旧参数名,优先级更高 [FromQuery(Name = "ProductId")] public string ProductId { get; set; } // 适配新参数名 [FromQuery(Name = "Product.Id")] public string NewProductId { get => ProductId; set => ProductId ??= value; } }
方案2:自定义绑定规则
如果项目中有大量同类需求,不想新增冗余属性,可以自定义支持多别名的查询绑定特性,配套自定义模型绑定器实现,无需修改业务模型的属性结构。
内容的提问来源于stack exchange,提问作者adnan kamili
相关产品推荐
相关产品推荐

