簡體   English   中英

.NET CORE Web API 帖子為空

[英].NET CORE Web API Post is null

這是我試圖將我的 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 Db.Connection.OpenAsync();
    body.Db = Db;
    await body.InsertAsync();
    return new OkObjectResult(body);
}

我嘗試發送的 JSON 請求

POST /api/mock HTTP/1.1
Content-Type: application/json; charset=utf-8
User-Agent: PostmanRuntime/7.19.0
Accept: */*
Cache-Control: no-cache
Postman-Token: fddea6c0-6a33-4690-a4f8-96ec31fc70ff
Host: localhost:5001
Accept-Encoding: gzip, deflate
Content-Length: 53
Connection: keep-alive
{
"CardNumber": "12341234",
"isAccepted": 0
}
HTTP/1.1 500 Internal Server Error
Date: Wed, 18 Dec 2019 12:34:36 GMT
Content-Type: text/plain
Server: Kestrel
Transfer-Encoding: chunked

這是我得到的錯誤

System.NullReferenceException:未將對象引用設置為對象的實例。 在 ProduktMock.Controllers.MockController.Post(MockPost body) in c:\\Users\\Mikkel ER Glerup\\produktmock\\Controllers\\MockController.cs:line 42 at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.TaskOfIActionResultExecutor.Execute map(IActionResultTypeMapper) ObjectMethodExecutor executor, Object controller, Object[] arguments) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask) at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.g_AwaitedController|10Action Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context) 在 Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker 中的范圍、對象和狀態、布爾值和已完成)。 g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Awaited|19_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted) at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.g__Logged|17_1(ResourceInvoker invoker) at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|6_0(Endpoint endpoint, Task requestTask, ILogger logger) at Microsoft.AspNetCore. Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware.Invoke(HttpContext context)

例外是因為我前面提到的Post([FromBody]MockPost body將為空。如果我將請求正文變成{"MockPost":{"CardNumber":"123","IsAccepted":"1"}}的“body” " 將不再為空,但值將為 0。

所以我的問題是如何讓我用 JSON 發送的值正確綁定?

編輯:事實證明,擁有正確的 JSON 非常重要,將整數作為字符串放入,而 bool 也是一個字符串,在我看來,這並不重要!

您的 JSON 無效。

整數

"CardNumber": "12341234"

CardNumber 是一個 int 所以應該是

"CardNumber": 12341234

布爾值

"isAccepted": 0

isAccepted 是一個布爾值,所以它應該是

"isAccepted": false

當它無法正確反序列化輸入時會發生這種情況。 這意味着,您的輸入 JSON 以某種方式無效。

我會嘗試什么;

{
  "CardNumber": 12341234,
  "isAccepted": false,
  "id": 0
}

您還可以通過在此頁面上輸入預期對象來檢查您的輸入應該是什么樣子: https : //csharp2json.io/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM