我开始使用AngularJS并尝试将带有字符串数组成员的JSON对象传递给MVC WebApi GET方法,但是我不能让我的WebAPI控制器为它接收正确的值。可能我错过了一些明显的东西,有人可以提出解决方案吗?在JS中,我的调用就像:
$http({
url: "/api/test",
method: "GET",
params: {
//...
fields: ["one", "two"]
}});
在服务器端,这是相应的型号:
public sealed class MyModel
{
//...
public List<string> Fields { get; set; }
}
最后是控制器的签名:
public dynamic Get([FromUri] MyModel model)
当我检查模型时,我发现Fields是一个只有1个项目的数组,这是“原始”JSON字符串,例如包含 [“one”,“two”] (包括方括号和引号),而不是包含2个项目1和2的数组。有可能解决这个问题吗? 感谢名单!
答案 0 :(得分:0)
尝试创建一个客户端JavaScript模型对象,将一个字段作为数组类型的“字段”并设置字段。
var myObj = {}
myObj.fields = [];
myObj.fields.push("one")
myObj.fields.push("Two")
然后将对象传递给WebApi的get方法。
$http({
url: "/api/test",
method: "GET",
data: myObj});
我认为,这应该有用。
答案 1 :(得分:0)
尝试'POST'并检查MyModel字段/属性的大小写,例如([f / F] ields) 另外检查您是否传递了一个MyModel或一组MyModel并更新了您的webApi方法签名。
我几天前就把一个C#类作为字符串发布了。
// C# class
public class PeronSerachCriteria {
public string surname, firstname, active;
public int pageIndex, pageSize;
}
//C# web service method accepts post, passed in as a string
public Object[] Search(string criteria) {
var ser = new System.Web.Script.Serialization.JavaScriptSerializer();
var x = ser.Deserialize < PeronSerachCriteria > (criteria);
}
// Angular.js service method
this.search = function(peronSerachCriteria) {
var d = $q.defer();
var postData = {
criteria: JSON.stringify(peronSerachCriteria),
};
$http({
method: 'POST',
url: apiurl + '/Search',
data: postData,
cache: true,
headers: {'Content-Type': 'application/json'}
}).success(function(data, status, headers, config) {
d.resolve(data.d);
}).error(function(data, status, headers, config) {
d.reject(status);
});
return d.promise;
};