[英]WebApi OData inlinecount not working
當我在uri $inlinecount=allpages
傳遞給OData時,我試圖使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
。 關於如何解決問題有什么建議嗎?
我通過添加以下代碼設法使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。 這意味着,我只需要使用1個Get方法就可以再創建4個控制器。 有沒有一種方法可以使用返回不同類型的方法GetBuildings
, GetHouseholds
, GetExpenses
和GetDebts
創建單個SearchController
? 因為據我了解,這行代碼
uilder.EntitySet<ListedBuildingResponseModel>("Buildings");
以某種方式將BuildingsController
“綁定”到ListedBuildingResponseModel
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.