WebApi OData inlinecount无法正常工作

时间:2016-01-20 11:47:27

标签: c# asp.net-web-api odata

当我在uri中传递$inlinecount=allpages时,我正在尝试让OData返回数据库中的实体数量。我已经在Stack Overflow中读到我应该返回IQueryable而不是IHttpActionResult,但这并没有解决问题。我也尝试按照asp.net网站上的教程进行操作,但这也没有给出任何结果。

[EnableQuery(
        PageSize = BuildingConstants.BuildingsPerPage,
        MaxTop = BuildingConstants.MaxBuildingsPerPage,
        AllowedArithmeticOperators = AllowedArithmeticOperators.None,
        AllowedLogicalOperators = AllowedLogicalOperators.None,
        AllowedFunctions = AllowedFunctions.SubstringOf,
        AllowedQueryOptions = AllowedQueryOptions.Filter | AllowedQueryOptions.OrderBy | AllowedQueryOptions.Top | AllowedQueryOptions.Skip | AllowedQueryOptions.InlineCount)]
    [ResponseType(typeof(IEnumerable<ListedBuildingResponseModel>))]
    public IQueryable<ListedBuildingResponseModel> Get()
    {
        var buildings = this.buildings
            .GetBuildings()
            .ProjectTo<ListedBuildingResponseModel>();

        return buildings;
    }

这是我写的关于OData的一切。控制器继承ApiController,而不是ODataController。在Register方法中,我没有添加任何OData路由或模型构建器。 $top$skip$orderby以及其他所有工作正常,但$inlinecount=allpages。有关如何解决问题的任何建议吗?

1 个答案:

答案 0 :(得分:0)

我设法通过添加以下代码使count=true工作:

 public static void Register(HttpConfiguration config)
    {
        config.MapODataServiceRoute("odata", "odata", model: GetEdmModel());
    }

    private static IEdmModel GetEdmModel()
    {
        var builder = new ODataConventionModelBuilder();
        builder.EntitySet<ListedBuildingResponseModel>("Buildings");

        builder.EnableLowerCamelCase();
        var edmModel = builder.GetEdmModel();
        return edmModel;
    }

现在一切正常,但我不能在课堂上使用我的其他动作,因为我得到406错误状态代码而且我不知道为什么。我不希望我的其他行动支持OData,所以我正在考虑可能的解决方案。仅为OData操作执行单独的控制器是一个选项,但我还有家庭,费用和债务控制器,其Get方法我想支持OData。这意味着,我需要创建另外4个控制器,只有1个Get方法。有没有办法可以使用返回不同类型的方法SearchControllerGetBuildingsGetHouseholdsGetExpenses来创建单个GetDebts?因为,据我了解这行代码

uilder.EntitySet<ListedBuildingResponseModel>("Buildings");

以某种方式&#34;绑定&#34; BuildingsControllerListedBuildingResponseModel