[英]Web API [FromBody] parameter is null when sending an array of objects
我似乎已經遇到了Web API的一個有趣的問題-使用此控制器操作,在左花括號處有一個斷點來檢查thing
:
[HttpPut]
public void Test([FromBody]object thing)
{
}
如果我提交以下請求(作為CURL),則會得到期望值,該期望值是包含主體數據的JObject:
curl -X PUT -H "Content-Type: application/json" -d '{
"Name": "Joe",
"Key": { "Key": "Value" }
}' "http://localhost/api/TestController/Test"
也就是說,其中Name
是Joe且Key
是另一個包含Key = Value
對象的匿名對象。
但是,如果我稍稍更改此設置以改為提交Keys
數組,則會得到null
。 沒有錯誤,只是null
。
curl -X PUT -H "Content-Type: application/json" -d '{
"Name": "Joe",
"Keys": [{ "Key": "Value" }]
}' "http://localhost/api/TestController/Test"
為什么會這樣呢? HTTP動詞似乎無關緊要(我嘗試過POST和PUT),並且使用dynamic
代替object
是同一回事。
原來我在代碼中的其他位置將MaxDepth
的全局JSON設置設置為2
,該設置在控制器動作之前運行。 為什么它返回null
而不是空對象的原因仍然不在我的范圍內,但是將其更改為3
可以解決問題並按預期運行。
抱歉給大家帶來的困擾,謝謝您的回答!
我認為這完全取決於您希望如何使用它,如果您想獲得一個強類型化的模型,您可以隨時創建一個像user3658685所說的模型。
您可以做的另一件事是將數據綁定到JObject,然后使用Newton-soft Serializer進行序列化:
public void Post([FromBody] JObject value)
{
//instead of object you can use any type you wish to cast
object obj = value.ToObject<object>();
}
WebApi使用模型映射類來嘗試使用WebApi方法的參數映射json對象。 您可以通過創建一個具有與json對象匹配的所有屬性的類來解決此問題。
public class Contract {
public string Name { get; set; }
public dynamic[] Keys { get; set; }
}
並更改您的WebApi方法的簽名
public void Post([FromBody] Contract value)
{
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.