【问题标题】:ASP.NET Core 6 ODATA Count not returning a valueASP.NET Core 6 ODATA Count 不返回值
【发布时间】:2021-09-11 08:32:59
【问题描述】:

我最近升级到.NET 6 Core 预览版,但遇到了一些关于 ODATA 的问题。在.NET Core 3.1 工作的用途不再有效。

这是我的启动 sn-p: 我也相信EnableQueryFeatures() 默认允许Count

services.AddControllers().AddNewtonsoftJson(options =>
    { 
        options.SerializerSettings.ContractResolver = new DefaultContractResolver();
    }).AddOData(opt => opt
          .EnableQueryFeatures()
          .AddRouteComponents("odata", GetEdmModel()
    );

我有以下动作方法,当调用时,计数不返回 到前端。

pageResult 有一个计数值,但没有返回到前端, 当我使用 Chrome DevTools 检查结果时。

[Route("odata/Tasks")]
public PageResult<TaskModel> AjaxListOData([FromQuery]ODataQueryOptions queryOptions)
{            
    var result = queryOptions.ApplyTo(dataContext.Tasks) as IEnumerable<TaskModel>;
    var pageResult = new PageResult<TaskModel>(
    result,
    null,
    count: Request.ODataFeature().TotalCount);

    return pageResult;
}

【问题讨论】:

  • 在独立的控制台项目中重现问题,并将错误提交到 EF Core 存储库。

标签: odata asp.net-core-6.0


【解决方案1】:

我通过继承 ODataController 而不是从 Controller.

【讨论】:

  • 我想分享更多观众的原因。在 8.x OData 属性路由中,控制器或操作需要一个新属性 https://github.com/OData/AspNetCoreOData/blob/master/src/Microsoft.AspNetCore.OData/Routing/Attributes/ODataAttributeRoutingAttribute.cs。由于 ODataController 对其进行了修饰,[Route("odata/Tasks")] 被视为 OData 属性路由。如果您只使用Controller 作为基本类型,[Route("odata/Tasks")] 会转到正常的 ASP.NET Core 路由。
  • @SamXu ASP.NET Core OData 文档需要一些爱。博客也是。我在 .NET 6 中使用它已经快一年了,我遇到了很多没有文档或任何公告的重大更改。阅读示例项目不是文档。人们通常关心能够使用 OData,而不是如何使用自定义格式化程序。他们还关心使用 EF Core 和 GroupBy。我们正在谈论基础知识
猜你喜欢
  • 1970-01-01
  • 2014-12-18
  • 1970-01-01
  • 2018-07-11
  • 2017-08-09
  • 2015-09-06
  • 1970-01-01
  • 2014-07-31
  • 2018-09-27
相关资源
最近更新 更多