如何在WebAPI控制器

时间:2015-11-26 16:47:44

标签: c# asp.net asp.net-mvc asp.net-mvc-4 asp.net-web-api

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

{"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控制器中接收参数?

我根据How to receive dynamic data in Web API controller Post method

尝试了
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 个答案:

答案 0 :(得分:3)

而不是

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

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

以下内容应该有效:

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

另外,请指定id来自url:

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