【问题标题】:Can't bind json in POST request body to class argument in .net-core无法将 POST 请求正文中的 json 绑定到 .net-core 中的类参数
【发布时间】:2020-06-22 13:39:05
【问题描述】:

我正在尝试从我的 Angular 前端向 .net Core 3.1 后端发出 post 请求,但在控制器方法中,参数对象默认只能获取 0 和 null 值;

let response = await fetch(url, {
  method: 'POST',
  headers: {
    'Content-Type': 'application/json'
  },
  body: JSON.stringify(obj)
});
[ApiController]
[Route("[controller]")]
[ApiExplorerSettings(IgnoreApi = true)]
public class RequestController : ControllerBase
{
[HttpPost]
public async Task<IAResponseViewModel> PostAnswer([FromBody] IAResponseViewModel something)
{
   var temp = something.ToString();
         
   if (!ModelState.IsValid)
   {
      Console.WriteLine();
   }

   return something;
}
}
public class IAResponseViewModel
{
   public string AdministrationId { get; }
   public int RoundUsesItemId { get; }
    public int ResponseOptionId { get; }

}

我看到正在提交的 JSON 对象

{AdministrationId: "12345678-00e8-4edb-898b-03ee7ff517bf", RoundUsesItemId: 527, ResponseOptionId: 41}

检查控制器方法时,IAResponseViewModel 的 3 个值为 null 或 0 当我将参数更改为 object 时,我得到的值是

ValueKind = Object : "{"AdministrationId":"12345678-00e8-4edb-898b-03ee7ff517bf","RoundUsesItemId":523,"ResponseOptionId":35}"

我尝试使用和不使用 [FromBody] 属性,更改控制器方法的参数和前端参数的属性的大小写,将 viewmodel 属性复制粘贴到提交的对象键上,将发布的对象包装在'某物'对象。 ModelState.IsValid 属性显示为真。 我有其他答案,例如Asp.net core MVC post parameter always null & https://github.com/dotnet/aspnetcore/issues/2202 和其他人,但找不到有用的答案。

为什么模型绑定不起作用以及如何使用 json 数据填充我正在使用的 viewmodel 类?

【问题讨论】:

  • 会不会是因为IAResponseViewModel中的属性是'get only'?
  • 就是这样。给它设置参数修复它。现在我如何将其呈现为正确的答案,或者我只是删除问题?
  • 您可以使用该信息添加您自己的答案并接受它。

标签: c# json model-view-controller .net-core


【解决方案1】:

来自对我最初问题的评论:

可能是因为 IAResponseViewModel 中的属性是“仅获取”吗?

确实这就是问题所在。提供属性(默认)设置方法解决了这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-29
    • 2021-09-05
    • 1970-01-01
    • 1970-01-01
    • 2020-05-26
    • 1970-01-01
    相关资源
    最近更新 更多