【问题标题】:.NET CORE Dictionary<string, object> does not consume post request parameter.NET CORE Dictionary<string, object> 不使用 post 请求参数
【发布时间】:2020-09-10 23:11:29
【问题描述】:

我最近从 .NET Framework 迁移到 .NET Core,

我的控制器参数通常包含 Dictionary 来处理 JSON 格式的负载请求。

public JsonResult RegisterUser(Dictionary<string, object> reqInfo)

但是,在 .NET Core 上尝试此操作时,尽管我的请求负载具有值,但字典始终为空。

【问题讨论】:

  • 我们需要更多信息。您是否有更多可以共享的代码,尤其是 RegisterUser 上的任何请求方法属性?您是否确认此方法已运行,并且 reqInfo 为 null 或者根本没有命中端点?
  • JSON 是文本,所以 Dictionary&lt;string,object&gt; 无济于事。此外,如果字符串包含 array 会发生什么?首先,您不需要 dictionary 来处理 JSON。您可以使用强类型对象。这就是所有 ASP.NET Core 项目、所有文档和教程的工作方式。即使您想通过单个操作处理任意 JSON 有效负载,最好使用 dynamic 而不是 Dictionary
  • 请发布 JSON 文本。请求很可能包含 JSON 数组,而不是字典。

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


【解决方案1】:

您可能需要为有效负载的源指定一个属性。

根据 Microsoft Docs,会扫描负载以查找潜在来源,但“仅针对简单类型”。

因此,如果您的有效负载源是正文,请尝试使用以下代码:

public JsonResult RegisterUser([FromBody] Dictionary<string, object> reqInfo)

来源:https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-3.1#sources

【讨论】:

  • 如果正文包含数组,即使这样也会失败。
  • 我试过这个,但它反映为一个字符串化数组。
  • 会有办法传递多维数组吗?
猜你喜欢
  • 2012-03-01
  • 2021-08-27
  • 2017-02-02
  • 1970-01-01
  • 1970-01-01
  • 2023-04-03
  • 1970-01-01
  • 1970-01-01
  • 2014-10-22
相关资源
最近更新 更多