【问题标题】:I can't seem to post an array of objects我似乎无法发布对象数组
【发布时间】:2015-01-09 23:07:10
【问题描述】:

好的,这就是我所在的地方。

我有一些代码可以将一组好东西发送到 .NET WebAPI (c#)。

var questions = [];
$('#questions').find('input').each(function(){
    var text = $(this).val();
    questions.push({ ID: 123, Question: text });
});

$.ajax({
    type: 'POST',
    url: _apiPath + '/main/savequestions',
    data: { "" : questions }
}).done(function(data){
    alert(JSON.stringify(data));
});

所以我不久前了解到 .NET Web API 会与数组混淆,并且存在一个已知错误,这就是为什么您必须使用 "" 作为属性名称来发送数据。

这是我的 web api 控制器:

  [Route("main/savequestions")]
  [HttpPost]
  public List<Question> SaveQuestions(List<Question> questions)
  {
    using (var mc = new MyContext())
        {
            List<Question> list = new List<Question>();

            if (questions != null)
            {
                foreach (var item in questions)
                {
                       var dbQ = new Question();
                       dbQ.ID = Guid.NewGuid();
                       dbQ.ToolID = item.ID;
                       dbQ.Question = item.Question;
                       mc.Questions.Add(dbQ);

                       list.Add(dbQ);
                }
            }

            mc.SaveChanges();

            return list;
        }   
 }

当我们在桌面上时,这可以正常工作。一切都保存...工作...真棒。

所以我们正在使用 PhoneGap,当我们使用 phonegap 应用程序模拟运行此代码的应用程序时,不会保存任何数据。我们已经检查并确保我们发送的 JSON 是相同的......但是当我们运行它时,控制器似乎得到一个空数组,因此它没有保存任何东西。

这种不一致足以让我发疯。

救命!

大卫

【问题讨论】:

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


    【解决方案1】:

    尝试以下方法:

    1. 专门将 jQuery AJAX 调用中的“contentType”设置为 JSON。 jQuery 提交为 'application/x-www-form-urlencoded;默认为 charset=UTF-8'。
    2. JSON.stringify 你的数组

    这将告诉 WebAPI 在模型绑定期间使用 JSON MediaTypeFormatter: http://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

    我不确定为什么桌面浏览器和移动浏览器之间存在差异,除非桌面浏览器或 jQuery 以不同方式处理“数据”。

    $.ajax({
        type: 'POST',
        url: _apiPath + '/main/savequestions',
        contentType: 'application/json; charset=utf-8',
        data: JSON.stringify(questions)
    }).done(function(data){
        alert(JSON.stringify(data));
    });
    

    【讨论】:

    • 这似乎成功了……哇。多么随意。非常感谢!
    猜你喜欢
    • 2018-08-14
    • 1970-01-01
    • 2011-06-23
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 1970-01-01
    相关资源
    最近更新 更多