2017-10-11 4 views
2

verfolge ich im Laufe AngularJS Vorderseite nach oben mit Web-API-to-Back ASP.net verwenden, versuchen wir Abfragen mit ODATA zu tun, so fügte ich diesen Code in den ProductController im WebAPIOData mit Asp.net und AngularJS

// GET: api/Products 
[EnableQuery()] 
public IQueryable<Product> Get() 
{ 
    var productRepository = new ProductRepository(); 
    return productRepository.Retrieve().AsQueryable(); 
} 

hinzugefügt dann den Code unten in der Product im Winkelcode:

function ProductListCtrl(productResource) { 
    var vm = this; 

    productResource.query({$skip:1, $top:3}, function (data) { 
     vm.products = data; 
}) 

aber wenn ich versuche, es gibt mir die folgenden Fehler auszuführen:

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

Haben Sie Ihre Route verdrahtet zu modellieren? Wenn Sie 'ProductController' haben, muss die Route' ... \ Product' sein, nicht 'products'. Ich glaube, es ist Groß- und Kleinschreibung. –

+0

Rückgabe von IQueryable in Ihrem Controller ist eine schlechte Idee. Das sind keine Daten, IQueryable ist eine Möglichkeit, die Abfrage zu erstellen, führt jedoch nichts aus, bis Sie eine ToList() ausführen oder die Ausführung speziell aufrufen. Es gibt keinen Grund, das von Ihrem Controller zurückzugeben, und es wird viele Probleme verursachen, wenn Sie diese Route hinuntergehen. –

+0

Dies ist die Anleitung Tutorial, ich möchte nur die Idee bekommen. Das Modell ist Produkte nicht Produkt –

Antwort

0

Vielleicht haben Sie keine odataConfiguration? Wo ist deine EDM-Konfiguration?

In Ihrer Konfigurationsdatei müssen Sie etwas wie folgt aus:

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

Weitere Informationen erhalten Sie dort: https://docs.microsoft.com/en-us/aspnet/web-api/overview/odata-support-in-aspnet-web-api/ odata-v4/create-ein-odata-v4-endpoint – Robert

+0

Was ist die EDM-Konfiguration, ich bin neu in asp.net und C#, können Sie bitte weiter erklären ?, Ich fand eine WebApiConfig-Datei in der App_start, ist das was Sie gemeint? –

+0

EDM - Entity Data Manager. Sie sollten Ihre Konfiguration konfigurieren, um OData-Routing bereitzustellen. – Robert