在 AngularJs 中将复杂参数传递到查询中
Passing a Complex Parameter into a Query in AngularJs
我已经看到 100 个将 ID 传递到 $resource.get() 以便从 Angular 中的后端查询信息的示例。我没能找到的是如何传递一个复杂的对象。
如果我有 table 个要 return 的对象,并且我希望 运行 使用多个过滤器项目对它们进行搜索,我需要将这些项目作为参数传递或作为一个复杂的参数。例如,假设我有一个 table 的人名及其城市、州等。我希望能够这样说:
var myResource = $resource(url);
myResource.get({name : "Mike", state : "Texas"});
return可以是单行也可以是多行。但重点是如何将参数关闭到 API 调用?
我设置其他更简单的方法的方法是创建一个我 return 喜欢的存储库:
return resource('/api/broker/productionInfo/');
然后在我的 API 中执行此操作(在 [RoutePrefix("api/broker")] 设置之后:
[HttpGet]
[Route("productionInfo")]
public IHttpActionResult GetProductions()
{}
这一切都很棒,但我希望能够在存储库调用中添加搜索条件,然后在 API 方法中添加(即从查询字符串中提取或将其传递)。
如果我正确理解您的要求,您只是想将其他参数传递到 angular 资源 get
请求中。就像您已经建议的一样简单:
resource.get({id: 1, custom_param_1: "param1", custom_param_2: "param2"});
这将导致一个如下所示的 http 请求:
/resource/1?custom_param_1=param1&custom_param_2=param2
然后您可以在事物的 API 端提取这些参数。
需要注意的是 get
请求有最大长度,如果您在请求中附加了很多不同的参数,最好使用 post
或 put
代替。
我看到您唯一缺少的是 [FromUri]
修饰属性,在您的 GetProduction 中API 方法。由于 Get
仅支持通过查询字符串进行参数绑定 (无正文绑定).
您的参数:
options: {
StartDate: _startDate
EndDate: _endDate
TextSearch: "some search query....",
Page: 1,
PageSize: 25,
et...
}
然后,从您的控制器调用您的存储库:
repository.get(options).$promise.then(function (data) {
// data = response payload from backend
});
存储库
....
return resource('/api/broker/productionInfo/');
....
API
[HttpGet]
[Route("productionInfo")]
public IHttpActionResult GetProductions([FromUri] SearchCriteriaModel criteria) {
....
}
希望对您有所帮助。
我已经看到 100 个将 ID 传递到 $resource.get() 以便从 Angular 中的后端查询信息的示例。我没能找到的是如何传递一个复杂的对象。
如果我有 table 个要 return 的对象,并且我希望 运行 使用多个过滤器项目对它们进行搜索,我需要将这些项目作为参数传递或作为一个复杂的参数。例如,假设我有一个 table 的人名及其城市、州等。我希望能够这样说:
var myResource = $resource(url);
myResource.get({name : "Mike", state : "Texas"});
return可以是单行也可以是多行。但重点是如何将参数关闭到 API 调用?
我设置其他更简单的方法的方法是创建一个我 return 喜欢的存储库:
return resource('/api/broker/productionInfo/');
然后在我的 API 中执行此操作(在 [RoutePrefix("api/broker")] 设置之后:
[HttpGet]
[Route("productionInfo")]
public IHttpActionResult GetProductions()
{}
这一切都很棒,但我希望能够在存储库调用中添加搜索条件,然后在 API 方法中添加(即从查询字符串中提取或将其传递)。
如果我正确理解您的要求,您只是想将其他参数传递到 angular 资源 get
请求中。就像您已经建议的一样简单:
resource.get({id: 1, custom_param_1: "param1", custom_param_2: "param2"});
这将导致一个如下所示的 http 请求:
/resource/1?custom_param_1=param1&custom_param_2=param2
然后您可以在事物的 API 端提取这些参数。
需要注意的是 get
请求有最大长度,如果您在请求中附加了很多不同的参数,最好使用 post
或 put
代替。
我看到您唯一缺少的是 [FromUri]
修饰属性,在您的 GetProduction 中API 方法。由于 Get
仅支持通过查询字符串进行参数绑定 (无正文绑定).
您的参数:
options: {
StartDate: _startDate
EndDate: _endDate
TextSearch: "some search query....",
Page: 1,
PageSize: 25,
et...
}
然后,从您的控制器调用您的存储库:
repository.get(options).$promise.then(function (data) {
// data = response payload from backend
});
存储库
....
return resource('/api/broker/productionInfo/');
....
API
[HttpGet]
[Route("productionInfo")]
public IHttpActionResult GetProductions([FromUri] SearchCriteriaModel criteria) {
....
}
希望对您有所帮助。