2016-12-27 30 views
1

下面我的JSON從後端傳遞數組數據調用的WebAPI方法(C#)

{"langs":[{"cisAreaId":100,"area":"Prog","name":"C#"},{"cisAreaId":110,"area":"Prog","name":"Java"},{"cisAreaId":120,"area":"Prog","name":"MS.NET languages(VB.NET,etc)"},{"cisAreaId":130,"area":"Prog","name":"MS Visual Languages (VB, C++, etc)"},{"cisAreaId":140,"area":"Prog","name":"Python"},{"cisAreaId":150,"area":"Prog","name":"Ruby"}]} 

上述數據I複製到$ scope.areas生成的數據。 現在在我看來

<div ng-repeat="lang in areas.langs"> 
     <label><input type="checkbox" ng-model="lang.selected" value="{{lang.cisAreaId}}" /> {{lang.name}}</label> 
    </div> 

一旦用戶點擊提交,我需要捕捉選擇複選框值並將其作爲JSON數據。

$scope.languageArray = []; 
    angular.forEach($scope.areas.langs, function (lang) { 
     if (lang.selected) $scope.languageArray.push({ "cisAreaId": lang.cisAreaId }); 
    }); 
    var data = JSON.stringify({ 
     languages: $scope.languageArray, 
    }); 

它是在形成像選擇兩個複選框的值

{"languages":[{"cisAreaId":110},{"cisAreaId":120}]} 

後從上面的代碼如何可以通過上述動態陣列中的URL調用後端方法

陣列
Angularjs Controller Code:  
XXXService.step2Form(data).then(function (results) { 
      console.log(results.data); 
     }, function (error) { 
      alert(error.data.message); 
     }); 

service code: 
var _step2Form = function (data) { 
     return $http.post(serviceBase + 'api/feedback/Step2Data' + data , { headers: { 'Content-Type': 'application/json' } }); 
     }; 

我有動態傳遞數據到後端

public HttpResponseMessage Step2Data([FromBody] int[] languages) 

,但我得到的錯誤是這樣

http://localhost:53401/api/XXXX/Step2Data[object%20Object],[object%20Object] 404 (Not Found) 

誰能告訴我如何通過動態的URL來調用的WebAPI方法數組值。

+0

你在傳遞通過URL,而不是身體。此外,擺脫複雜的對象結構,並使用一個ID數組。 –

+0

我試着只推送id,但結果是[130,140],錯誤URL是http:// localhost:53401/api/XXXXX/Step2Data130,140 404(Not Found)。我改變了後端的方法參數以及公共的HttpResponseMessage Step2Data([From Body] List languages),並且還刪除了[FomBody]。 – user2293819

回答

2
$scope.languageArray

你需要推只是ID:

$scope.languageArray = []; 
angular.forEach($scope.areas.langs, function (lang) { 
    if (lang.selected) $scope.languageArray.push(lang.cisAreaId); 
}); 
var data = JSON.stringify({ 
    languages: $scope.languageArray, 
}); 
+0

嘗試用[FromBody]代替[FromBody] int []語言列表 languages –

+0

我試着只推送id,但結果是[130,140],錯誤URL是http:// localhost:53401/api/XXXXX/Step2Data130,140 404(Not Found)。我在後端以及公共HttpResponseMessage Step2Data([自體]列出語言) – user2293819

+0

添加改變了方法參數的[HttpPost]到你的動作: [HttpPost] 公共HttpResponseMessage Step2Data([FromBody] INT []語言) –