Javascript 带有Asp.net和angularjs的Odata

Javascript 带有Asp.net和angularjs的Odata,javascript,c#,asp.net,angularjs,asp.net-web-api,Javascript,C#,Asp.net,Angularjs,Asp.net Web Api,我继续学习AngularJS使用ASP.net前后结合Web API的课程,我们尝试使用ODATA进行查询,因此我在WebAPI的ProductController中添加了此代码 //获取:api/产品 [启用查询()] 公共IQueryable Get() { var productRepository=new productRepository(); 返回productRepository.Retrieve().AsQueryable(); } 然后在productcontroller的角

我继续学习AngularJS使用ASP.net前后结合Web API的课程,我们尝试使用ODATA进行查询,因此我在WebAPI的
ProductController
中添加了此代码

//获取:api/产品
[启用查询()]
公共IQueryable Get()
{
var productRepository=new productRepository();
返回productRepository.Retrieve().AsQueryable();
}
然后在productcontroller的角度代码中添加以下代码:

function ProductListCtrl(productResource) {
    var vm = this;

    productResource.query({$skip:1, $top:3}, function (data) {
        vm.products = data;
 })
但当我尝试运行时,它会给我以下错误:

angular.js:12701获取?$skip=1和$top=3400(请求错误) 可能未经处理的拒绝:{“数据”:{“消息”:“URI中指定的查询无效。未注册任何非OData HTTP路由。”,“例外消息”:“未注册任何非OData HTTP路由。”


也许你没有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());
    }
}
公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
//新代码:
ODataModelBuilder=新ODataConventionModelBuilder();
建筑商实体集(“产品”);
config.MapODataServiceRoute(
routeName:“ODataRoute”,
routePrefix:null,
模型:builder.GetEdmModel());
}
}

您可以在那里获得更多信息:EDM配置是什么,我对asp.net和c#不熟悉,您能进一步解释吗?我在App_start中找到一个WebApiConfig文件,这就是您的意思吗?EDM-实体数据管理器。您应该配置您的配置以提供OData路由。您是否将路由连接到模型?如果您有
ProductController
则路由必须是
..\Product
,而不是
products
。我相信,它是区分大小写的。在控制器中返回IQueryable是个坏主意。这不是数据,IQueryable是建立查询的一种方法,但它实际上不会执行任何操作,直到您执行ToList()或者具体地调用执行。没有理由从控制器返回,如果您这样做,将导致许多问题。这是教程说明,我只是想了解一下。模型是产品,而不是产品