2013-07-21 55 views
1

我以AngularJS開始並嘗試將具有字符串數組成員的JSON對象傳遞給MVC WebApi GET方法,但我無法讓WebAPI控制器接收到正確的值爲了它。可能我錯過了一些明顯的東西,有人可以提出一個解決方案嗎?在JS,我的電話是這樣的:將字符串數組成員傳遞給MVC WebApi控制器的正確方法

$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項的數組。有沒有可能解決這個問題? Thanx!

回答

0

嘗試創建客戶端JavaScript模型對象,將一個字段作爲類型數組的「字段」並設置字段。

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

然後傳遞對象來獲取的WebAPI的方法。

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

我認爲,這應該工作。

+0

謝謝,我試過這個,但它不起作用。我認爲將這些數據放在查詢字符串中的正確方法是使用params屬性而不是數據,這是用於發佈的。如果我使用數據嘗試,我只是得到一個null。 – Naftis

0

嘗試'POST'並檢查MyModel字段/屬性的大小,例如([f/F] ields) ,並檢查您是否傳遞一個MyModel或MyModels數組並更新您的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; 
}; 
+0

謝謝,但我應該堅持GET,以符合服務器端的一般RESTful體系結構。控制器使用GET返回項目列表,GET + id項目的詳細信息,並且具有POST(=添加新項目)和PUT(=更新項目)的方法。我將參數放在GET查詢字符串中,因爲我要使用ng-grid,它要求我發送分頁信息,對信息進行排序(對於字段和降序/升序排列幾個字符串數組),並過濾信息。 – Naftis

相關問題