簡體   English   中英

C#Web API POST參數FromBody始終為null

[英]C# Web API POST parameter FromBody is always null

我已經在網上搜了好幾個小時,並嘗試了StackOverflow上描述的許多不同的解決方案。 我之前已經問過類似的問題,但沒有一個答案或評論對我有用。

問題:我有一個.NET Web API,它有一個帶有一些參數的Post方法。 其中一個參數是一個復雜的對象,應該從正文中讀取(即JSON)。 但是,此對象始終為null

這是我的代碼:

// POST api/worksheets/post_event/true/false
        [Route("post_event/{newWorksheet}/{eindEvent}")]
        [HttpPost]
        public Event Post(bool newWorksheet, bool eindEvent, [FromBody] Event eventData)
        {
            return eventData;
        }

要清楚:eventData是始終為null的對象。 布爾值被正確讀取。

完整的請求正文是:

POST http://localhost:5000/api/worksheets/post_event/true/false
Content-Type: application/json
{"Persnr":1011875, "WorksheetId":null, "Projectnr":81445, "Uursoort":8678, "Tijd":{"09-08-2016 9:25"}}

作為參考,這是Event-class:

public class Event
    {
        public long Persnr { get; set; }
        public int WorksheetId { get; set; }
        public int Projectnr { get; set; }
        public int Uursoort { get; set; }
        public DateTime Tijd { get; set; }
    }

我已經嘗試過的一些事情:

  • 將JSON更改為不同的格式(僅限值,“Event”:{}圍繞實際對象,a =在JSON前面)。
  • 僅使用Event參數進行測試(刪除其他參數以及路徑中的參數)
  • 將默認ctor添加到Event。
  • 刪除[FromBody]標簽。 如果我這樣做,Event-object不為null,但所有屬性都是。 可以通過URI填充屬性,但這不是所需的行為。

根據我讀過的所有解決方案和文檔,它應該按照我上面顯示的方式工作。 我錯過了什么?

您的json對象無效。 我的建議是始終通過json解析器手動編寫json對象,如下所示: http//json.parser.online.fr/

"Tijd":{"09-08-2016 9:25"}

應該是

"Tijd":["09-08-2016 9:25"]

這種類型的正確JSON應該是正確的

{"Persnr":1011875, "WorksheetId":null, "Projectnr":81445, "Uursoort":8678, "Tijd":"09-08-2016 9:25"}

Tijd沒有花括號,因為Tijd是普通的DateTime屬性,可以從字符串推斷出來,代表DateTime

當您的對象無法從JSON請求反序列化時,通常會發生這種情況。

最佳實踐是確保所有請求屬性都可以接受null (使值類型屬性可以為 )。 然后您可以驗證是否提供了所有需要的請求屬性,否則返回400錯誤 這樣,您至少可以了解請求屬性導致問題的原因。

暫無
暫無

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

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