无法发布对象列表,也仅允许有限数量的响应头

时间:2019-07-14 04:39:27

标签: javascript angularjs iis asp.net-web-api

很抱歉,我对Angular(以及整个ASP.net环境)有点陌生。我已经创建了从API .net服务检索的客户列表。然后,我在每个复选框旁边放置复选框,以指示它们是活跃客户还是非活跃客户。想法是,当您滚动列表时,可以选中这些框,然后按“保存”,这将更新客户活跃或不活跃的数据库。这是我的尝试:


app.controller("CustomersController", function ($scope, $http) {
    $http.get(serviceURL + "/customers")
    .then(function onSuccess(response) {
        $scope.customers = response.data;
    }, function onError(response) {
        //~
    });

    $scope.saveCustomers = function () {
        $http.post(serviceURL + "/customers", $scope.customers)
        .then(function onSuccess(response) {
            //~
        }, function onError(response) {
            //~
        });

    };
});

在这里,通过在HTML文件中按下保存按钮来调用saveCustomers,并在范围内更改了选中标记的值。发布此消息时,我收到400 HTTP响应(即使它返回的对象列表在控制台中看起来也不错)。我什至试图将JSONconvert排除在外。然后,我进行了迭代,并尝试为$ scope.customers中的每个对象在循环中进行发布。但是,这返回了409 HTTP响应,我不确定这对我的帖子意味着什么。我已经尝试过PUT,但标头中不允许这样做。我试图通过将其添加到Web.config文件中来解决此问题:

  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <remove name="WebDAVModule"/>
    </modules>
    ....

以及在IIS管理器中更改处理程序映射,以便ExtensionlessUrlHandler-Integrated-4.0包含动词PUT和DELETE。 我有一个“添加客户”页面,该页面对表单上的单个对象使用了一个帖子,并且效果很好。我已经花了几个小时尝试所有可能的方法,但是我无法让这个简单的方法起作用。另外,这是我的HTML供参考:

<tr ng-repeat="a in customers | filter:txtFilter">
   <td>
      {{a.customer_id}}
   </td>
   <td>
      {{a.customer_name}}
   </td>
   <td>
      {{a.customer_phone}}
   </td>
   <td>
     <input type="checkbox"
            name="selectedInactives[]"
            value="{{a.inactive}}"
            ng-checked="a.inactive"
            ng-click="toggleSelection(a.inactive)" 
            ng-true-value="jQuery(document).ready()" 
            ng-false-value="{{0}}"
            /> {{a.inactive}}
    </td>
</tr>

(注意:不用担心将ng-true-value或false值设置为整数值,这没有什么区别)

2 个答案:

答案 0 :(得分:0)

尝试一下:

 $http.post(serviceURL + "/customers",{customrers: $scope.customers}).then();

将prop名称(而不是“客户:”)放到您的后端函数中。

答案 1 :(得分:0)

请勿在{{1​​}}指令中使用插值({{ }})。带有双花括号的插值会将AngularJS表达式转换为字符串。

要使用数字值:

ng-*-value