使用jquery:
发布表单数据$.ajax('API/Validate/Customer?column=1&rowid=2&vmnr=3&isik=4',
{
data: JSON.stringify({
headerData: $("#_form").serializeArray()
}),
async: false,
contentType: "application/json; charset=utf-8",
dataType: "json",
type: "POST"
});
ASP.NET MVC4 Web API控制器验证:
public class ValidateController : ApiController
{
public class Body
{
public Dictionary<string, string> headerData { get; set; }
public Dictionary<string, string> rowData { get; set; }
}
public HttpResponseMessage Validate(
string id,
string column,
string rowid,
int? vmnr,
string isik,
[FromBody] Body body,
string dok = null,
string culture = null,
uint? company = null
)
{ ...
控制器中body.headerData值为null。
根据答案 How to receive dynamic data in Web API controller Post method
body.headerData必须有表单键。 但是,它是空的。
如何将headerData作为控制器中的键,值对?
Chorme开发人员工具显示正确的json发布在正文中:
{"headerData":[{"name":"Kalktoode","value":"kllöklö"},
{"name":"Kaal","value":""}
]}
我试图删除
public Dictionary<string, string> rowData { get; set; }
来自课堂,但问题仍然存在。
答案 0 :(得分:2)
实际上,你的控制器会将身体反序列化为:
.item {
order: <integer>;
}
不您实际发送的JSON结构。 您的控制器会查找包含2个成员的主体 beeing Dictionnaries ,而不是键值对的数组 。
通过键值数组,我的意思是:
{
"headerData": {"someKey":"someValue", "otherKEy":"otherValue"},
"rowData": {"someKey":"someKey"}
}
您需要将Body对象更新为:
{
"headerData": [
{
"key": "string",
"value": "string"
}
],
"rowData": [
{
"key": "string",
"value": "string"
}
]
}