2016-01-20 101 views
2

我試圖讓OData在數據庫中返回實體的數量,當我將它通過$inlinecount=allpages在uri中時。我已經閱讀堆棧溢出,我應該返回IQueryable而不是IHttpActionResult,但是這並沒有解決問題。我也試圖按照asp.net網站上的教程,但那也沒有給出任何結果。WebApi OData inlinecount不起作用

[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

是不是ODataV4 $ count = true而不是$ inlinecount? –

+0

「消息」:「查詢參數'$ count'不受支持。」 –

+0

將它添加到允許列表? 「AllowedQueryOptions.Count」。 –

回答

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方法。有沒有一種方法可以用方法GetBuildingsGetHouseholdsGetExpensesGetDebts創建單個SearchController,返回不同的類型?因爲,據我瞭解這行代碼

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

莫名其妙地「結合」的BuildingsControllerListedBuildingResponseModel