【发布时间】:2017-09-01 09:52:29
【问题描述】:
我正在尝试通过 GET 请求在查询字符串中向控制器发送一些参数。我正在使用[FromQuery] 将查询字符串中的所有参数设置为一个Dictionary<string, string>。它运行良好,直到其中一个参数名称包含点 (.) 符号。我检查了Request.Query 对象,它看起来解析得很好,但是我的 Dictionary 对象得到了这个,确切的项目是错误的。所以它看起来像[FromQuery] binder 中的错误,或者我做错了什么。调试值为Request.Query 和我的parameters 的代码如下:
发送的查询字符串如下所示:
?query=&InspectionType=Safety&ItemType=InspectionPoint&RecordParentGUID=9275bee2-0a2d-461c-8835-51880e76f035&parent.ResultClassCode=parent.ResultClassCode
更新: 简而言之,从在 .net 开发人员团队工作的 Eilon Lipton 得到了答案 - 这是设计使然。点号“。”和 '[', ']' 是用于表示属性和索引器的特殊字符。完整答案在这里:https://github.com/aspnet/Mvc/issues/6746
【问题讨论】:
-
确实,您应该在github.com/aspnet/mvc 中提交错误报告。你看一下 DictionaryModelBinderProvider 的代码,这是负责绑定到字典的类。
-
@MichalHainc 我发现点号是非保留字符,所以不需要对它们进行编码:stackoverflow.com/questions/1455578/…
-
值得注意的是,GUID 正在获取正确的值。只有其他的(可能是枚举)没有选择任何值。事件最后一个是字符串,获取值
-
@Gurpreet 所有这些参数都是字符串,它们来自 js 中的 ajax 调用。我使用 Dictionary
不将其绑定到任何其他类型,但正如您所看到的,当键具有点号时 - 它会中断。
标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-mvc