$ .Ajax发布到Web Api 2的数组不适合我

时间:2015-07-08 08:20:24

标签: jquery ajax asp.net-web-api

数据模型

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控制器中收到,我能够用断点输入方法但是空列表中的值

3 个答案:

答案 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);
    });