【问题标题】:ASP.NET core FromQuery getting invalid parameters with dot sign insideASP.NET 核心 FromQuery 获取带有点号的无效参数
【发布时间】: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


【解决方案1】:

. (点)、[ 和 ] 字符在 ASP.NET MVC Core 内部随处使用作为模型绑定过程中的路径分隔符,并且(AFAIK)没有办法解决。

如果您想从查询字符串中访问原始值,Request.Query 是迄今为止最简单的解决方案。

把它变成一个纯粹的Dictionary<string, string>

Request.Query.ToDictionary(kvp => kvp.Key, kvp => kvp.Value);

【讨论】:

  • 是的,我已经这样做了。认为可能是活页夹本身内部的某种错误。
  • 接受了这个作为一种解决方法,已经在 github 上针对该问题创建了问题,但还没有响应。如果有任何新信息会更新。
  • @JacobSobus,你能在这里分享问题的网址吗?
  • @MladenB。最后是我的问题 :) 给你:github.com/aspnet/Mvc/issues/6746
【解决方案2】:

能否使用局部视图将 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>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 2018-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多