如何将KeyValuePair传递给web api

时间:2015-11-26 14:44:10

标签: angularjs asp.net-web-api

我正在尝试将我的角度服务中的KeyValuePairs列表传递给我的web api控制器,如下所示:

web Api控制器:

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

角度服务:

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

我已经尝试了很多不同的方法来通过改变json的格式来传递params,但是我总是在te控制器中得到相同的结果。 filters = [0] {[,]}。所以它知道我传递了一些东西,但键/值总是为空。当我发送一个字符串列表而不是keyvaluepairs时,它获得的值就好了。有人可以帮我解决问题吗?

3 个答案:

答案 0 :(得分:0)

我已经找到了答案。 现在在控制器中反序列化JSON字符串,如下所示:

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

如果有人知道更好的解决方案,请告诉我:)

答案 1 :(得分:0)

我认为使用JSON.stringify()作为数据属性就足够了。

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

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

答案 2 :(得分:0)

尝试将$ resource服务路由添加到工厂并通过其方法在控制器中使用它,这将有助于您更有效地工作:

.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);
  };