[英]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.