我正在尝试使用GET请求向查询字符串中的控制器发送一些参数。我使用Dictionary<string, string>
将查询字符串中的所有参数都添加到一个[FromQuery]
。它一直运行良好,直到其中一个参数名称包含点(.
)符号。我检查了Request.Query
对象,看起来它解析得很好但我的Dictionary对象得到了这个,确切的项目错了。所以它看起来像[FromQuery]
活页夹中的bug或者我做错了什么。下面是Request.Query
和我parameters
的重新值的代码:
这是发送的查询字符串的样子:
?query=&InspectionType=Safety&ItemType=InspectionPoint&RecordParentGUID=9275bee2-0a2d-461c-8835-51880e76f035&parent.ResultClassCode=parent.ResultClassCode
更新: 得到Eilon Lipton在.net开发团队工作的答案,简而言之 - 这是设计的。点标记&#39;。&#39;和&#39; [&#39;,&#39;]&#39;是用于表示属性和索引器的特殊元素。完整答案可在此处获取:https://github.com/aspnet/Mvc/issues/6746
答案 0 :(得分:4)
。 (点),[和]字符在ASP.NET MVC Core内部随处使用,作为模型绑定过程中的路径分隔符,并且(AFAIK)无法解决这个问题。
如果要从查询字符串中访问原始值,Request.Query
是迄今为止最简单的解决方案。
将其变为纯Dictionary<string, string>
:
Request.Query.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);
答案 1 :(得分:0)
您是否可以使用局部视图将parent.ResultClassCode展平为ResultClassCode? p>
部分看起来像这样
@model parent
<div class="form-group">
<label asp-for="ResultClassCode"></label><span asp-validation-for="ResultClassCode" class="text-danger"></span>
<input asp-for="ResultClassCode" class="form-control">
</div>