我正在尝试将我的角度服务中的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时,它获得的值就好了。有人可以帮我解决问题吗?
答案 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);
};