C# .NET核心Web API Post为空
这就是我试图将JSON绑定到的对象C# .NET核心Web API Post为空,c#,json,asp.net-core,postman,C#,Json,Asp.net Core,Postman,这就是我试图将JSON绑定到的对象 public class MockPost { public int id {get; set;} public int CardNumber {get; set;} public bool isAccepted {get; set; } 这是控制器 [HttpPost] public async Task<IActionResult> Post([FromBody]MockPost body) { await D
public class MockPost
{
public int id {get; set;}
public int CardNumber {get; set;}
public bool isAccepted {get; set;
}
这是控制器
[HttpPost]
public async Task<IActionResult> Post([FromBody]MockPost body)
{
await Db.Connection.OpenAsync();
body.Db = Db;
await body.InsertAsync();
return new OkObjectResult(body);
}
这就是我得到的错误
System.NullReferenceException:对象引用未设置为对象的实例。
在c:\Users\Mikkel E.R.Glerup\ProduktMock\Controllers\MockController.cs中的ProduktMock.Controllers.MockController.Post(MockPost正文)中:第42行
位于Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfActionResultExecutor.Execute(IActionResultTypeMapper映射器、ObjectMethodExecutor执行器、对象控制器、对象[]参数)
在Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g|u等待| 12_0(ControllerActionInvoker invoker,ValueTask`1 actionResultValueTask)
在Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g_u等待| 10_0(ControllerActionInvoker invoker,Task lastTask,State next,Scope Scope,Object State,Boolean isCompleted)
位于Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed上下文)
位于Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(状态和下一步、范围和范围、对象和状态、布尔值和isCompleted)
在Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g_u等待| 13_0(ControllerActionInvoker invoker,Task lastTask,State next,Scope Scope,Object State,Boolean isCompleted)
在Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g_|19_0(ResourceInvoker invoker、Task lastTask、State next、Scope Scope、Object State、Boolean isCompleted)
在Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g|u记录| 17|u 1(ResourceInvoker invoker)
位于Microsoft.AspNetCore.Routing.EndpointMiddleware.g_uwaitRequestTask | 6_0(端点、任务请求任务、ILogger记录器)
位于Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext上下文)
位于Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext上下文)
执行此操作是因为我前面提到的Post([FromBody]MockPost body
将为null。如果我将请求body设置为{“MockPost”:{“cardname”:“123”,“IsAccepted”:“1”}
则“body”将不再为null,但值将为0
所以我的问题是,如何让JSON发送的值正确绑定
编辑:
事实证明,拥有正确的JSON是非常重要的,整数被放在字符串中,bool也是一个字符串,我认为这无关紧要!您的JSON无效
整数
"CardNumber": "12341234"
"isAccepted": 0
CardNumber是一个整数,所以应该是
"CardNumber": 12341234
"isAccepted": false
布尔人
"CardNumber": "12341234"
"isAccepted": 0
isAccepted是一个bool,所以它应该是
"CardNumber": 12341234
"isAccepted": false
当无法正确地反序列化输入时,就会发生这种情况。这意味着,您的输入JSON在某种程度上是无效的 我会尝试什么
{
"CardNumber": 12341234,
"isAccepted": false,
"id": 0
}
您还可以通过在此页面上输入所需的对象来检查您的输入应该是什么样子:{“CardNumber”:“123”,“IsAccepted”:“1”}是否这样尝试过您是否尝试过
{“CardNumber”:12341234,“IsAccepted”:false}
?通过更改结构不进行更改当MockPost
没有Db
属性或InsertAsync
方法时,该属性如何编译?这不可能是您正在运行的实际代码。@MikkelRohdeGlerup不相关的建议;您应该以大写字母开头属性名称。body也会以null结尾way@MikkelRohdeGlerup我认为CardNumber应该是整数。