将字符串数组成员传递给MVC Web Api控制器的正确方法

时间:2013-07-21 23:34:36

标签: json asp.net-mvc-4 angularjs asp.net-web-api

我开始使用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的数组。有可能解决这个问题吗? 感谢名单!

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;
};
相关问题