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.",.....

+0

你有一台连接路线模型?如果你有'ProductController',那么路由必须是'... \ Product',而不是'products'。我相信,这是区分大小写的。 –

+0

在你的控制器中返回IQueryable是一个坏主意。这不是数据,IQueryable是一种构建查询的方式,但它不会真正执行任何操作,除非您执行ToList()或专门调用执行。没有理由从你的控制器返回它,如果你沿着这条路线走下去,这将是很多问题的原因。 –

+0

这是教程说明,我只是想明白。该型号是产品不是产品 –

也许你没有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()); 
    } 
} 
+0

您可以到达的更多信息: https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/ odata-v4/create-an-odata-v4-endpoint – Robert

+0

什么是EDM配置,我是asp.net和c#的新手,你可以进一步解释一下吗?,我在App_start中找到了一个WebApiConfig文件,那就是你是什么意思? –

+0

EDM - 实体数据管理器。您应该配置您的配置以提供OData路由。 – Robert