var people = [{name: "Sam", age: 40}, {name: "Vivian", age: 20}]
foo = function () {
var url = "/api/folder/foo";
$http({
method: 'GET', url: url, params: {
version: "7.1",
ppl: people <---- the passing that causes error
}
}).success(function (data, status, header, config) {
console.log("success!");
}).error(function (data, status, header, config) {
alert("server error");
});
};
这是调用C#代码:
[HttpPost]
[ActionName("foo")]
public List<LoopItem> foo(String version, List<Person> ppl){
System.Diagnostics.Debug.WriteLine("Success!");
return repository.foo( version, ppl);
}
正如您所看到的,我的C#代码将参数作为字符串和Person of List,这是一个简单的对象:
public class Person
{
public String name { get; set; }
public Int32 age { get; set; }
}
虽然在我的js代码中我试图模仿C#类Person,并创建了一个具有相同键的对象列表,但C#函数似乎不会将传递的对象列表识别为Person的列表。结果,没有任何调试成功&#34;得到印刷。有谁知道如何解决这个问题?
答案 0 :(得分:3)
使用JSON编码/解码。
var people = [{name: "Sam", age: 40}, {name: "Vivian", age: 20}]
foo = function () {
var myJsonPeople = JSON.stringify(people);
var url = "/api/folder/foo";
$http({
method: 'POST', url: url, params: {
version: "7.1",
ppl: myJsonPeople <---- the passing that causes error
}
}).success(function (data, status, header, config) {
console.log("success!");
}).error(function (data, status, header, config) {
alert("server error");
});
};
在服务器端,您需要以json的形式接收此数据,然后将其转换为对象列表。
[HttpPost]
public string foo(string jsonList)
{
//Convert string to JSON object
//Foreach loop for conversion to objects
}
答案 1 :(得分:0)
您的C#控制器看起来希望POST
请求(来自[HttpPost]
属性)而不是GET
请求。您需要相应地更改您的JavaScript请求。
看起来像有角度的$http
服务。所以这应该有效:
var url = "/api/folder/foo";
var params = {
version: "7.1",
ppl: people
};
$http.post(url, params)
.success( //etc
这使用$http.post
,这是发出POST
请求的快捷方式。