【发布时间】:2017-01-16 08:27:15
【问题描述】:
我有一个 AngularJS 应用程序通过 POST 请求将对象数组发送到 Web API 控制器方法。在服务器上,我有以下方法定义:
[HttpPost]
[Route("Active")]
public async Task<IHttpActionResult> Post(IList<Media> mediaFiles)
{
try
{
foreach (var file in mediaFiles)
{
await Task.Factory.StartNew(() => PublicData.SetInactiveMedia(file.Id, file.Active));
}
return Ok();
}
catch (ArgumentException e)
{
return BadRequest(e.Message);
}
}
我使用 $resource 工厂来与服务器交互(但我不得不提到我也尝试过使用 $http 并且没有出现任何差异)。方法是这样的:
var activeMedia = $resource('/api/adminhotspotsmedia/active', { save: { method: 'POST' } });
var setActiveMedia = function (mediaFiles) {
activeMedia.save(mediaFiles);
}
mediaFiles 变量是与服务器上的Media 模型完全匹配的对象数组。
在开发者控制台中,我可以看到与请求相关联的请求负载:
所以阵列正试图到达服务器,但它不能。服务器获取对象列表的空值。我会补充一点,我尝试过使用:
-
[FromBody]标签 -
dynamic而不是IList<Media> -
IList<object>而不是IList<Media>
问题仍然存在。会是什么?
【问题讨论】:
-
不要使用界面。除非您有自定义模型绑定器,否则模型绑定器将不知道如何处理它。它需要具体的类来绑定,所以使用具体的对象。所以要么使用实际的
List<Media>或数组Media[]
标签: c# angularjs post asp.net-web-api angular-resource