2015-11-26 4 views
2

ASP.NET MVC4 WebAPI Почтовый контроллер получает данные json в буфере POST. Объект содержит два фиксированных свойства имени, headerData и rowData. Они имеют переменное число свойств, какКак получить динамические данные в контроллере WebAPI

{"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 ASP.NET MVC4 с использованием URL-адреса, например API/Entity/someid?culture=en&layout=1 с маршрутизацией по умолчанию.

Как получить параметры в контроллере 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 есть пустые. Как получить значения в них?

ответ

2

Вместо

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; } 
} 

А также указать, что идентификатор будет поступать из URL:

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

Спасибо, это сработало. Большой ответ – Andrus

Смежные вопросы