数据模型
public class Foo
{
public string Id { get; set; }
public string Title { get; set; }
}
Web API 2控制器
[Route("api/UpdateFoo")]
public IHttpActionResult UpdateFoo(List<Foo> Foos)
{
}
JS
// here I need to create fooData which is list of foo
var fooData = [];
fooData.push({ Title: "title1" });
fooData.push({ Title: "title2" });
$.ajax({
method: "POST",
url: "api/UpdateFoo",
data: fooData
}).done(function (result) {
// good
}).fail(function(xhr) {
alert(xhr.responseText);
});
我在这里缺少什么?在fiddler看起来我发送fooData然而它没有在Web Api控制器中收到,我能够用断点输入方法但是空列表中的值
答案 0 :(得分:2)
我昨天花了几个小时就此。有一个已知的&#34; quirk&#34;在asp.net webApi中通过ajax See Quirk Here发布数据时。在您的特定问题中总结一下,只需添加以下内容:
var fooData = [];
fooData.push({ Title: "title1" });
fooData.push({ Title: "title2" });
$.ajax({
method: "POST",
url: "api/UpdateFoo",
data: {'': fooData} //<-- the '' empty prefix name for the data
}).done(function (result) {
// good
}).fail(function(xhr) {
alert(xhr.responseText);
});
答案 1 :(得分:1)
创建另一个模型以包含List
public class ListOfFoos
{
public List<Foo> Foos {get; set;}
public ListOfFoos()
{
Foos = new List<Foo>();
}
}
那么你的控制器应该是这样的:
[Route("api/UpdateFoo")]
public IHttpActionResult UpdateFoo(ListOfFoos listOfFoos)
{
}
现在,如果你像这样传入JSON,你应该能够在控制器中获取列表:
{
"foos" : [
{ "Id": 1, "Title" : "f1" },
{ "Id": 2, "Title" : "f2" }
]
}
答案 2 :(得分:0)
尝试进行Ajax调用:
$.ajax({
method: "POST",
url: "api/UpdateFoo",
data: JSON.stringify(fooData),
contentType: 'application/json'
}).done(function (result) {
// good
}).fail(function(xhr) {
alert(xhr.responseText);
});