2015-11-26 17 views
0

我想從我的角度服務傳遞KeyValuePairs的名單,以我的網頁API控制器,就像這樣:如何通過一個KeyValuePair到網頁API

網絡API控制器:

[HttpGet] 
    [Route("")] 
    public IHttpActionResult Users([FromUri] List<KeyValuePair<string, object>> filters) 
    { } 

角服務:

return $http.get(url, { 
      params: { 
       filters: [{ Key: "UserName", Value: "A.Lincoln" }] 
      } 
     }); 

我已經試過許多不同的方式改變了JSON格式傳遞參數,可以,但我總是以相同的結果TE控制器結束。 filters = [0] {[,]}。所以它知道我傳遞了一些東西,但鍵/值總是爲空。當我發送一個字符串列表而不是keyvaluepairs時,它的值很好。有人能幫我解決問題嗎?

回答

0

我已經找到答案。 現反序列化JSON字符串中的控制器像這樣:

public IHttpActionResult Users([FromUri] string jsonFilters) 
    { 
     var filters = JsonConvert.DeserializeObject<Dictionary<string, object>>(jsonFilters);} 

如果有人知道一個更好的解決方案,請讓我知道:)

0

我認爲使用JSON.stringify()爲您的數據屬性應該足夠了。

var jsonString = [ 
    { 
     "Key": "UserName", 
     "Value": "A.Lincoln" 
    } 
] 

$http.get(url, data: JSON.stringify(jsonString)) 
    .then(successCallback, errorCallback); 
0

嘗試添加$資源服務航線的工廠並通過其方法控制器使用它,這將幫助你更有效地工作:

.factory('yourResource', ['$resource', function ($resource) { 
     return $resource(url/:key/:value, { Key: '@key', Value: '@value' } { 
     'get': { 
      method: 'GET', 
      headers: {"Content-Type": "application/json"} 
     } 
     }); 
    }]); 

然後控制器

$scope.get= yourResource.get({Key: 'UserName', value: 'A.Lincoln'}, function (response) { 
    alert(response); 
    };