OData 上的 $select 查询因简单请求而挂起

问题描述 投票:0回答:0

我正在尝试在 WebAPI .NET 6 项目中实现一个非常简单和基本的 OData 支持,遵循这个论坛https://devblogs.microsoft.com/odata/up-running-w-odata-in-asp- net-6/ 建议。

我在 Program.cs 中配置 OData 是这样的:

builder.Services.AddControllers()
    .AddOData(options =>
        options.EnableQueryFeatures(null))
    .AddNewtonsoftJson(options =>
        options.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore);

并添加了一个基本的特定控制器如下:

[Authorize]
[Route("ext/[controller]")]
public class ExtendedController : ODataController
{
    private readonly IExtendedManager<MyType> _myTypeExtManager;
    private readonly ILogger<ExtendedController> _logger;

    public ExtendedController(IExtendedManager<MyType> myTypeExtManager,
                                ILogger<ExtendedController> logger)
    {
        _myTypeExtManager = myTypeExtManager;
        _logger = logger;
    }

    [HttpGet]
    [EnableQuery]
    public IQueryable<MyType> Get()
    {
        return _myTypeExtManager.GetAll();
    }
}

“IExtendedManager”作为作用域服务注入“Program.cs”中的应用程序构建器,并包含一个 EF Core 上下文实例。

该应用程序可以很好地构建和运行。 Swagger 正确显示,按预期路由 ext/Extended。 不过,当我尝试使用 PostMan 向 WebApi 请求时,$select 功能根本不起作用。它不会给我任何结果,但会无限挂起请求(尽管调试我可以看到该方法被调用并返回结果)。有趣的是,$top 和 $skip 选项在同一条路线上正常工作。

更新

根据要求,这是注入管理器的实现:

    public class MyTypeExtManager : IExtendedManager<MyType>
    {
       private readonly MyContext _context;

       public MyTypeExtManager(MyContext context)
       {
           _context = context;
       }

       public IQueryable<MyType> GetAll()
       {
          return _context.MyType; 
       }
    }
   

    

有什么我想念的吗?

asp.net select entity-framework-core odata ef-core-6.0
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.