2013-01-03 71 views
12

我開始使用WebAPI,大部分情況都進展順利。我遇到了一個特定功能的問題。這一個與另一個不同,因爲它只是IEnumerable類型的參數。將IEnumerable參數傳遞給WebAPI

我已經在Post()函數的第一行設置了一個斷點,我正在打這個函數,但「values」參數總是有0的計數。我確認參數進入客戶端事實上,它包含一個整數數組。如果我刪除[FromUri]屬性,則'values'參數爲NULL,而不是0。

如何讓我的整數數組在我的WebAPI函數中通過?

這裏的的WebAPI功能:

[System.Web.Mvc.HttpPost] 
public void Post([FromUri] IEnumerable<int> values) 
{ 
    if (values == null || !values.Any()) return; 

    int sortorder = 1; 
    foreach (int photoId in values) 
    { 
     _horseRepository.UpdateSortOrder(photoId, sortorder); 
     sortorder++; 
    } 
} 

這裏的AJAX調用(這是使用jQuery UI可排序的功能):

$(".sortable").sortable({ 
    update: function (event, ui) { 
       var newArray = $(".sortable").sortable("toArray"); 

       $.ajax({ 
        url: '/api/photo', 
        type: 'POST', 
        contentType: 'application/json, charset=utf-8', 
        async: true, 
        dataType: 'json', 
        data: JSON.stringify(newArray), 
        complete: function (data) { } 
       }); 
      } 
     }); 

回答

10
contentType: 'application/json, charset=utf-8', 

應該成爲(內容之間的分隔符類型和字符集是分號,而不是逗號):

contentType: 'application/json; charset=utf-8', 

和:

public void Post([FromUri] IEnumerable<int> values) 

應該成爲(有POST請求中沒有的URI參數):

public void Post(IEnumerable<int> values) 

現在你是好去假設newArray(你在這裏沒有顯示)是一個整數數組:

newArray = [ 1, 2, 3 ] 
+0

數字它應該是一個分號(代碼最初是寫沒有[F romUri],這是我的調試嘗試的一部分)。謝謝! – Scott

+0

@Darin可以從POST請求中提取Uri參數;正是這種使用實例應該來自正文,即public void Post([FromBody] IEnumerable values)。 –