2017-01-16 31 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

相關問題