.Net多重复QueryString参数映射规则及官方文档咨询
.NET 查询字符串参数映射与CGI格式规则说明
你定义的控制器端点是正确的,[FromQuery]特性专门用于指定参数从查询字符串绑定,而非请求体——这对GET请求的集合类型参数(比如你的List<string> description)尤为关键,毕竟GET请求通常没有请求体。
以下是.NET官方文档中明确的核心参数绑定特性与CGI格式规则:
核心参数绑定特性
[FromQuery]:强制参数从查询字符串获取,支持通过重复键名(如description=asd&description=qwe)绑定到集合类型(List、数组等)[FromRoute]:从路由模板中提取参数(比如你代码里的{search}路由参数,默认会自动绑定到同名的string search参数,无需额外标记)[FromHeader]:从HTTP请求头中读取参数[FromBody]:从请求体中获取参数,多用于POST/PUT等请求,支持JSON、表单数据等格式[FromForm]:从表单数据中读取参数,适配application/x-www-form-urlencoded或multipart/form-data编码的请求
查询字符串格式规则
- 集合类型参数支持两种绑定格式:
- 重复键名:
?key=value1&key=value2(你使用的这种,兼容标准CGI场景) - 索引式:
?key[0]=value1&key[1]=value2,部分场景下可使用,但.NET默认优先识别重复键名
- 重复键名:
- 复杂对象参数:通过点分隔键名实现绑定,比如
?User.Name=Alice&User.Age=30,会自动映射到包含Name和Age属性的User对象 - 可选参数:若参数为可空类型(如
string?)或带有默认值,查询字符串中可省略该键,框架会自动使用默认值或null
你的代码示例中,search参数来自路由、description来自查询字符串的重复键,完全符合.NET的参数绑定规则,是正确的实现方式。
内容的提问来源于stack exchange,提问作者user22335954
相关产品推荐
相关产品推荐

