我有这个对象列表,我需要从我的angularjs javascript代码发送:
var dataToSend = [{
SubId: "c9cb1d3e-8c32-4a9e-8f0d-0008196776de",
CustomerName: "Blah"
}, {
SubId: "aaaa1d3e-8c32-4a9e-8f0d-0008196776de",
CustomerName: "Blah2"
}]
我尝试过这些不同的变体,但它们都没有起作用:
1
$http.post("url",
{
dataType: 'json',
headers: {
contentType: "application/json; charset=utf-8",
},
method: "POST",
data: dataToSend,
}).then...
2
$http.post("url",
{
data: $.param(dataToSend),
}).then...
3
$http.post("url",
{
data: angular.toJson(dataToSend),
}).then...
4
$http.post("url",
{
data: { customers: dataToSend },
}).then...
5
$http.post("url",
{
data: JSON.stringify({ customers: dataToSend }),
}).then...
我的API端代码是(我已尝试使用[FromBody]属性,但没有运气):
[HttpPost]
public async Task<JsonResult> CreateCustomers(List<Customer> customers)
{
// customers is always null
}
这是我的Customer.cs:
public partial class Customer
{
public System.Guid SubId { get; set; }
public string CustomerName { get; set; }
}
你能帮帮我吗?我已经尝试过发布到CreateCustomers(客户c)而不使用列表并且它按预期工作。但是当我使用一个列表时,它总是在另一边变为空。
编辑: $ .ajax正在运行但$ http.post不是。知道为什么吗?
var request = $.ajax({
dataType: "json",
url: "url",
method: "POST",
data: { '': dataToSend }});
答案 0 :(得分:0)
您的帖子数据与参数List<Customer>
不匹配。
将服务器端方法更改为:
[HttpPost]
public async Task<JsonResult> CreateCustomers(JObject queryParam)
{
// populate your list here
// for eaxample : var customers = queryParam["customers"].ToString();
}
此外,您还可以使用此代码将数据发送到服务器:
$http({
url: 'url',
dataType: 'json',
method: 'POST',
data: jsonData,
headers: { "Content-Type": "application/json" }
}).success(function(response){ $scope.response = response;
}).error(function(error){ $scope.error = error; });
答案 1 :(得分:0)
您是否正在发送JSON(包括数据类型:&#39; json&#39;)
$http({
url: "url",
dataType: 'json',
method: 'POST',
data: dataToSend,
headers: {
contentType: "application/json; charset=utf-8",
}
})
在C#中,在参数
中添加FromBody[HttpPost]
public async Task<JsonResult> CreateCustomers([FromBody]]List<Customer> customers)
{
// customers is always null
}
有关Ajax参数的更多信息
contentType 是您要发送的数据类型,因此application / json; charset = utf-8是常见的,就像application / x-www-form-urlencoded一样; charset = UTF-8,这是默认值。
dataType 是您期望从服务器返回的内容:json,html,text等。
这应该有效。如果您遇到问题,请发布完整代码
答案 2 :(得分:0)
在你的参数前面使用[ModelBinder]
。
[HttpPost]
public async Task<JsonResult> CreateCustomers([ModelBinder]List<Customer> customers)
{
// customers is always null
}
Web API仅对简单类型使用模型绑定,而对其他所有内容都使用格式化程序。添加[ModelBinder]会强制复杂类型无论如何都要使用模型绑定。