2017-10-11 75 views
2

我跟隨在課程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

這是教程說明,我只是想明白。該型號是產品不是產品 –

回答

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