ASP.NET核心FromQuery获取带有点符号的无效参数

时间:2017-09-01 09:52:29

标签: c# asp.net asp.net-mvc asp.net-core asp.net-core-mvc

我正在尝试使用GET请求向查询字符串中的控制器发送一些参数。我使用Dictionary<string, string>将查询字符串中的所有参数都添加到一个[FromQuery]。它一直运行良好,直到其中一个参数名称包含点(.)符号。我检查了Request.Query对象,看起来它解析得很好但我的Dictionary对象得到了这个,确切的项目错了。所以它看起来像[FromQuery]活页夹中的bug或者我做错了什么。下面是Request.Query和我parameters的重新值的代码:enter image description here

这是发送的查询字符串的样子: ?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

2 个答案:

答案 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?

部分看起来像这样

@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>