通过id和字符串angularjs webapi获取

时间:2016-04-17 08:54:56

标签: angularjs asp.net-web-api

我对使用webapi的angularjs是全新的,我可能会采用错误的方式,但基本上我想通过文本搜索产品(因为我在数据库中执行查询)以及获取产品通过id来更新现有产品。

按文字搜索我的方法如下。

//productResource.js

        (function () {
        "use strict";

        angular.module("common.services").factory("productResource", ["$resource", "appSettings", productResource])

        function productResource($resource, appSettings) {

            return $resource(appSettings.serverPath + "/api/products/:search");
        }
    }());

在我的webApi控制器中

public IEnumerable<Product> Get(string search)
        {
            var repository = new ProductRepository();
            return repository.Restrieve(search); 
        }

        public Product Get(int id)
        {
            Product product;
            var repository = new ProductRepository();

            if (id > 0)
            {
                product = repository.GetProductById(id);
            }
            else
            {
                product = repository.CreateProduct();
            }

            return product;
        }

然后在我的WebApiConfig中:

 config.MapHttpAttributeRoutes();

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{search}",
            defaults: new { search = RouteParameter.Optional }
        );

现在设置的方式我设法按文字进行搜索。

如何配置 productResource.js WebApiConfig 以按ID进行搜索?

1 个答案:

答案 0 :(得分:2)

我会选择略有不同的路线。在RESTful API中,您拥有资源(在您的情况下为产品)。资源由id唯一标识。所以我会有以下路线:

GET /products/:id

如果我想按文字搜索多个产品:

GET /products?search=xxxx

这对于默认路线就好了:

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

现在在客户端:

function productResource($resource, appSettings) {
    return $resource(appSettings.serverPath + 'api/products/:id');
}

并查询:

productResource.query({ id: '123'});
productResource.query({ search: 'some search text'});

以下是nice overview,其中包含$resource

的示例

另外,请确保在下次尝试将搜索文本(或来自客户端的任意数据)放入路径的路径部分而不是它们所属的位置之前阅读following blog post - &gt;查询字符串。