【发布时间】:2018-03-23 15:34:11
【问题描述】:
我正在使用 ASP.net 跟进 AngularJS Front to Back with Web API 课程,我们正在尝试使用 ODATA 进行查询,所以我在 WebAPI 的 ProductController 中添加了这段代码
// GET: api/Products
[EnableQuery()]
public IQueryable<Product> Get()
{
var productRepository = new ProductRepository();
return productRepository.Retrieve().AsQueryable();
}
然后在角码中的productcontroller中添加以下代码:
function ProductListCtrl(productResource) {
var vm = this;
productResource.query({$skip:1, $top:3}, function (data) {
vm.products = data;
})
但是当我尝试运行时,它给了我以下错误:
angular.js:12701 GET http://localhost:59302//api/products?$skip=1&$top=3 400(错误请求) 可能未处理的拒绝:{"data":{"message":"URI 中指定的查询无效。未注册非 OData HTTP 路由。","exceptionMessage":"未注册非 OData HTTP 路由。", .....
【问题讨论】:
-
您是否已将您的路线连接到模型?如果你有
ProductController,那么路由必须是...\Product,而不是products。我相信,它是区分大小写的。 -
在控制器中返回 IQueryable 是个坏主意。这不是数据,IQueryable 是一种构建查询的方式,但它实际上不会执行任何操作,直到您执行 ToList() 或专门调用执行。没有理由从您的控制器返回它,如果您沿着这条路线走,这将导致许多问题。
-
这是教程说明,我只是想了解一下。模型是产品而不是产品
标签: javascript c# asp.net angularjs asp.net-web-api