【问题标题】:Odata with Asp.net and angularjs使用 Asp.net 和 angularjs 的 Odata
【发布时间】:2018-03-23 15:34:11
【问题描述】:

我正在使用 ASP.net 跟进 AngularJS Front to Back with Web API 课程,我们正在尝试使用 ODATA 进行查询,所以我在 WebAPI 的 ProductController 中添加了这段代码

// 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(错误请求) 可能未处理的拒绝:{"data":{"message":"URI 中指定的查询无效。未注册非 OData HTTP 路由。","exceptionMessage":"未注册非 OData HTTP 路由。", .....

【问题讨论】:

  • 您是否已将您的路线连接到模型?如果你有ProductController,那么路由必须是...\Product,而不是products。我相信,它是区分大小写的。
  • 在控制器中返回 IQueryable 是个坏主意。这不是数据,IQueryable 是一种构建查询的方式,但它实际上不会执行任何操作,直到您执行 ToList() 或专门调用执行。没有理由从您的控制器返回它,如果您沿着这条路线走,这将导致许多问题。
  • 这是教程说明,我只是想了解一下。模型是产品而不是产品

标签: javascript c# asp.net angularjs asp.net-web-api


【解决方案1】:

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

【讨论】:

  • 更多信息您可以在那里获得:docs.microsoft.com/en-us/aspnet/web-api/overview/…
  • 什么是EDM配置,我是asp.net和c#的新手,能否请您进一步解释一下?我在App_start中找到了一个WebApiConfig文件,是这个意思吗?
  • EDM - 实体数据管理器。您应该配置您的配置以提供 OData 路由。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-26
  • 2013-08-04
  • 1970-01-01
  • 2022-01-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多