【发布时间】: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