【问题标题】:passing Array data dynamically in URL to call webapi method (C#)在 URL 中动态传递数组数据以调用 web api 方法 (C#)
【发布时间】:2017-05-11 13:55:54
【问题描述】:

下面是我从后端生成的 json 数据

{"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"}]}

以上数据我复制到 $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方法。

【问题讨论】:

  • 你是通过 url 传入的,而不是 body。此外,摆脱复杂的对象结构,只使用一个 id 数组。
  • 我尝试只推送 id,但结果将是 [130,140] 并且错误 URL 是 localhost:53401/api/XXXXX/Step2Data130,140 404(未找到)。我更改了后端的方法参数以及 public HttpResponseMessage Step2Data([From Body] List 语言) 并且还删除了 [FomBody]。

标签: c# angularjs arrays json asp.net-web-api


【解决方案1】:

$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,
});

【讨论】:

  • 尝试将 [FromBody] int[] 语言替换为 [FromBody] List 语言
  • 我尝试只推送 id,但结果将是 [130,140] 并且错误 URL 是 localhost:53401/api/XXXXX/Step2Data130,140 404(未找到)。我更改了后端的方法参数以及 public HttpResponseMessage Step2Data([From Body] List 语言)
  • 将 [HttpPost] 添加到您的操作中:[HttpPost] public HttpResponseMessage Step2Data([FromBody] int[] 语言)
  • 是的,我已经添加了 [HttpPost] public HttpResponseMessage Step2Data([FromBody] List 语言) 我想我们需要在 URL 部分进行更改。
  • 是的。将 + 替换为 , : $http.post(serviceBase + 'api/feedback/Step2Data , data...
猜你喜欢
  • 2013-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-17
  • 2021-12-07
  • 2019-01-14
相关资源
最近更新 更多