在 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 请求有最大长度,如果您在请求中附加了很多不同的参数,最好使用 postput 代替。

我看到您唯一缺少的是 [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) {
    ....
}

希望对您有所帮助。