1

我从 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 项目一和二。有可能解决这个问题吗?谢谢!

4

2 回答 2

0

尝试创建一个客户端 JavaScript 模型对象,其中一个字段作为数组类型的“字段”并设置字段。

var myObj = {}
myObj.fields = [];
myObj.fields.push("one")
myObj.fields.push("Two") 

然后将对象传递给 WebApi 的 get 方法。

$http({
url: "/api/test",
method: "GET",
data: myObj});

我认为,这应该工作。

于 2013-07-22T05:44:02.430 回答
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;
};
于 2013-07-22T06:14:30.413 回答