Odata与Asp.net和angularjs
问题描述:
我跟随在课程AngularJS前端与Web API使用ASP.net,我们正在尝试使用ODATA进行查询,所以我添加了代码ProductController
在WebAPIOdata与Asp.net和angularjs
// 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 (Bad Request) Possibly unhandled rejection: {"data":{"message":"The query specified in the URI is not valid. No non-OData HTTP route registered.","exceptionMessage":"No non-OData HTTP route registered.",.....
答
也许你没有odataConfiguration? EDM配置在哪里?
在您的配置文件,你需要类似的东西:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// New code:
ODataModelBuilder builder = new ODataConventionModelBuilder();
builder.EntitySet<Product>("Products");
config.MapODataServiceRoute(
routeName: "ODataRoute",
routePrefix: null,
model: builder.GetEdmModel());
}
}
你有一台连接路线模型?如果你有'ProductController',那么路由必须是'... \ Product',而不是'products'。我相信,这是区分大小写的。 –
在你的控制器中返回IQueryable是一个坏主意。这不是数据,IQueryable是一种构建查询的方式,但它不会真正执行任何操作,除非您执行ToList()或专门调用执行。没有理由从你的控制器返回它,如果你沿着这条路线走下去,这将是很多问题的原因。 –
这是教程说明,我只是想明白。该型号是产品不是产品 –