关于C#:如何在Web API控制器中接收动态数据

How to receive dynamic data in WebAPI controller

ASP.NET MVC4 WebAPI Post控制器在POST缓冲区中接收json数据。
对象包含两个固定的名称属性,headerData和rowData。
它们具有数量可变的属性,例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
{"headerData": {
   "Tasudok":"134",
   "Kuupaev":"2015-11-23",
   "Dokumnr":"135319"
   },


"rowData": {
 "Toode":"",
 "Kogus":"0.0000",
 "Nimetus":"???¤??l?¤<a",
 "_rowsum":"0.00",
 "Id":"1639",
 "Dokumnr":"135319",
 "_oper":"edit",
 "_rowid":"1639"
  }
}

例如,在某些调用中,rowData可能包含其他属性,而某些rowData属性可能会丢失。
使用默认路由使用API/Entity/someid?culture=en&layout=1之类的URL将数据发布到ASP.NET MVC4 Web API。

如何在WebAPI控制器中接收参数?

我试图根据如何在Web API控制器中接收动态数据的Post方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class EntityController : APIController
{

    public class Body
    {   Dictionary<string, string> headerData { get; set; }
        Dictionary<string, string> rowData { get; set; }
    }

    public HttpResponseMessage Post(string id, Body body,
        [FromUri]string culture = null,
        [FromUri]uint layout = 0
        )
    { ... }
}

但是body.headerData和body.rowData为空。
如何获取价值?


而不是

1
2
3
4
5
public class Body
{  
    Dictionary<string, string> headerData { get; set; }
    Dictionary<string, string> rowData { get; set; }
}

明确将您的班级成员标记为公开成员,以便反序列化程序可以完成其工作!

以下应能工作:

1
2
3
4
5
public class Body
{  
    public Dictionary<string, string> headerData { get; set; }
    public Dictionary<string, string> rowData { get; set; }
}

此外,还要指定ID来自网址:

1
2
3
4
5
public HttpResponseMessage Post(Body body,
    [FromUri]string id,
    [FromUri]string culture = null,
    [FromUri]uint layout = 0
)