为什么GetQueryNameValuePairs方法会移除查询参数中的方括号?
规则说明
这个参数名转换行为是ASP.NET Web API模型绑定系统的内置设计,目的是兼容查询字符串到复杂类型对象的自动绑定逻辑,具体规则如下:
- 当查询参数键中
[]包裹的内容符合C#标识符命名规则(首字符为字母,后续仅含字母、数字)时,系统会自动将参数名[键名]的格式转换为参数名.键名的点分隔格式,和C#类的属性访问语法对齐,方便后续直接绑定到对应类的属性上。 - 当
[]包裹的内容以数字开头、或者包含字母数字以外的特殊字符时,不会触发转换,会保留原始的方括号格式,和你测试得到的结果完全一致。
文档相关说明
这个转换逻辑属于Web API模型绑定的底层实现细节,官方文档仅在复杂类型绑定的相关说明中提到过会对查询参数键做适配转换,没有单独将这个符号转换规则作为独立文档条目公开。
如果你需要获取原始的查询字符串键名,可以不调用GetQueryNameValuePairs()方法,直接读取Request.RequestUri.Query获取原始查询字符串后自行解析即可。
内容的提问来源于stack exchange,提问作者huha
相关产品推荐
相关产品推荐

