2017-01-16 37 views
0

我有一个AngularJS应用程序通过POST请求向Web API控制器方法发送对象数组。在服务器上,我有以下方法定义:为什么Web API控制器通过POST请求从客户端获取空数据?

[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); 
    } 
} 

我使用$资源工厂为了与服务器进行交互(但我不得不提,我也试图与$ HTTP并没有什么区别露面) 。这是该方法:

var activeMedia = $resource('/api/adminhotspotsmedia/active', { save: { method: 'POST' } }); 
var setActiveMedia = function (mediaFiles) { 
      activeMedia.save(mediaFiles); 
     } 

mediaFiles变量是绝对服务器上的Media模型匹配对象的数组。

在开发者控制台,我可以看到与请求相关的这个请求负载:

enter image description here

使阵列好一会服务器,但它不能。服务器获取对象列表的空值。我补充一点,我已经尝试使用:

  • [FromBody]标签
  • dynamic,而不是IList<Media>
  • IList<object>代替IList<Media>

的问题仍然存在。会是什么呢?

+0

不要使用界面。除非您有自定义的模型绑定器,否则模型绑定器将不知道如何处理它。它需要具体的类来绑定,以便使用具体的对象。所以要么使用实际的'List '或者数组'Media []' – Nkosi

回答

0

默认情况下,模型联编程序不会知道如何处理接口,除非您有一个自定义模型联编程序,该联编程序知道期望什么以及期望的行为。

或者您可以使用一个实际的List<Media>

[HttpPost] 
[Route("Active")] 
public async Task<IHttpActionResult> Post(List<Media> mediaFiles) { ... } 

或阵列Media[]

[HttpPost] 
[Route("Active")] 
public async Task<IHttpActionResult> Post(Media[] mediaFiles) { ... } 
+0

我已经从'List'切换到了'IList',因为我没有理解这个行为。现在我已经尝试了你的建议,但他们不工作。 – Ionna

相关问题