好的,所以我在这里。
我有一些代码可以向.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是相同的...但是当我们运行它时,控制器似乎得到一个空数组,因此它不会保存任何东西。
这种不一致足以让我感到沮丧。
帮助!
大卫
答案 0 :(得分:1)
尝试以下方法:
这将告诉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));
});