Web API Post不会将数据绑定到方法参数

时间:2016-10-17 16:01:42

标签: asp.net-web-api2

我讨厌问,因为有很多问题需要处理这个问题,但是我还没有把任何数据发布到ASP.NET Web API 2方法。这一切都来自同一个主机和端口。

这是我的服务器端代码:

Super

使用Javascript:

[RoutePrefix("api/help")]
public class HelpAPIController : ApiController
...
public class Item {
    public string name { get; set; }
    public string position { get; set; }
}

[Route]
[HttpPost]
public void Post([FromBody] Item[] stuff)
        ;  // we get here but data is always null or zero items in array
}

实际请求内容(无硬回复):

"use strict";
var a = [{ "name": "me", "position": "here" }, 
         { "name": "me", "position": "here" }, 
         { "name": "me", "position": "here" }];

jQuery.ajax({
    type: "POST",
    datatype: "application/json",
    url: "/api/help/",
    data: { "stuff": JSON.stringify(a) },
    success: function (data) { alert(data); },
    error: function (error) {
        ...
    }
});

2 个答案:

答案 0 :(得分:2)

尝试在Ajax POST中添加<div class="col-xs-6"> <ul class="list-group itemList"> <li class="list-group-item" ng-repeat="(id, product) in drinks" ng-click="addToShoppingList(id)" ng-hide="product.isHidden===true"> <strong>{{ product.name }}</strong> - {{ product.price | currency }} </li> </ul> </div> $scope.addToShoppingList = function(id){ $scope.itemsToBuy.push($scope.drinks[id]); $scope.drinks[id].isHidden = true; };

您有dataType,我认为这是您期望从服务器返回的内容,而contentType就是您要发送的内容。

答案 1 :(得分:2)

  1. 您没有将内容类型传递给服务器。 datatype是您对服务器的期望响应类型。 contentType就是您发送的内容。 jQuery中的默认contentTypeapplication/x-www-form-urlencoded; charset=UTF-8。您需要添加/编辑:

    dataType: "json",
    contentType: "application/json",
    
  2. 您不需要使用对象包装数据数组。这样做:

    data: JSON.stringify(a),