我对使用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进行搜索?
答案 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;查询字符串。