You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置ABP OData模块以支持$top、$skip等OData查询筛选器?

配置ABP OData模块支持$top、$skip等查询筛选器

我帮你搞定这个问题,之前我也碰到过类似的406错误,其实是ABP默认没有完全开启这些OData查询选项,咱们一步步来配置:

1. 在你的应用模块中配置OData选项

ABP的OData模块(AbpODataModule)允许你通过AbpODataOptions自定义底层的OData配置。你需要在自己的Web模块(比如YourProjectWebModule)的ConfigureServices方法里添加以下配置:

public override void ConfigureServices(ServiceConfigurationContext context)
{
    // 其他服务配置...

    Configure<AbpODataOptions>(options =>
    {
        options.PreConfigureAction = (odataBuilder, abpODataOptions) =>
        {
            // 对应WebAPI里的config.AddODataQueryFilter(),添加OData查询筛选器
            odataBuilder.AddODataQueryFilter();
            
            // 显式开启需要的查询选项,确保$top、$skip、$count等被允许
            // 这里可以根据需求调整,比如设置Top的最大值避免性能问题
            odataBuilder
                .Select()
                .Filter()
                .OrderBy()
                .Expand()
                .Count()
                .Top(100) // 限制最大返回条数,可根据业务调整
                .Skip(0);
        };
    });
}

2. 确保控制器方法启用查询支持

你的OData控制器需要继承AbpODataController,并且在返回IQueryable的方法上添加[EnableQuery]特性——这个特性是让OData框架处理查询参数的关键:

public class ProductsController : AbpODataController<Product>
{
    private readonly IRepository<Product> _productRepository;

    public ProductsController(IRepository<Product> productRepository)
    {
        _productRepository = productRepository;
    }

    [EnableQuery] // 必须添加这个特性才能处理OData查询参数
    public IQueryable<Product> Get()
    {
        return _productRepository.GetQueryable();
    }
}

3. 注意查询参数的版本差异

你提到的$inlinecount是OData v3的参数,ABP的OData模块通常基于OData v4,所以应该改用$count=true来获取总数。比如正确的请求示例:
/odata/Products?$top=10&$skip=0&$count=true

为什么会出现406错误?

406(Not Acceptable)错误通常是因为OData框架无法处理你传入的查询参数,原因可能是:

  • 没有开启对应的查询选项(比如没配置.Top()、.Skip())
  • 控制器方法没有添加[EnableQuery]特性
  • 使用了过时的OData参数(比如$inlinecount而不是$count)

按照上面的步骤配置后,应该就能正常使用这些查询筛选器了。

内容的提问来源于stack exchange,提问作者Assaf

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:37:46