【问题标题】:EnableQuery always perform SingleOrDefault on IEnumerable<T> resultEnableQuery 始终对 IEnumerable<T> 结果执行 SingleOrDefault
【发布时间】:2020-01-04 15:25:19
【问题描述】:

我有以下 Api 端点:

     [EnableQuery()]
     [Route("rankingreport", Name = "GetRankingReport")]
     public IQueryable<RefereeRankingReport> GetRankingReport()
     {
         var data = (from r in _context.RefereeRankings
                    join m in _context.Referees on r.RefereeId equals m.ID
                    join mg in _context.RefereeGradings on r.GradingId equals mg.ID
                    select new RefereeRankingReport
                    {
                        ...
                    })
                    .AsNoTracking();

         return data;
     }

我能够在 ASP.NET MVC 中以 http://url.base/api/referee/rankingreport 的形式查询此端点并获得所有结果。如果需要,我会在 url 上添加 odata 过滤器等来过滤数据。 http://url.base/api/referee/rankingreport?$filter=GradingId eq 5&amp;$orderby=GradingId,Ranking

但是,我正忙于升级到 .net core 3.1 并看到一个异常,它总是将结果返回为 SingleOrDetault。我不知道它为什么要这样做,因为该方法显然返回 IQueryable。

在启动时我已声明:

services.AddOData();

...

app.UseMvc(routeBuilder =>
            {
                routeBuilder.EnableDependencyInjection();
                routeBuilder.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
            });

我没有定义 odata 路由,因为我不需要或不想要它。

要让这个按预期返回结果列表或记录,我缺少什么?

【问题讨论】:

    标签: odata asp.net-core-webapi .net-core-3.1


    【解决方案1】:

    在 .NET Core 3.1 中 - 不支持端点路由(目前),您必须有 OData 路由才能使您的功能正常工作。

    【讨论】:

    • 谢谢@Hassan。我会留意你的博客以获取更新。一旦有可能,如果有人没有击败我,我会在此处发布更新。
    猜你喜欢
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 2019-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多