c# – 忽略Web API OData v4 $count = true
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c# – 忽略Web API OData v4 $count = true,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2616字,纯文字阅读大概需要4分钟。
内容图文
我开始了一个新的web api项目,并使用了最新的OData库,但是我无法按照它在之前3.0版本的odota库中的方式工作.无论我尝试过什么,我总是回到json对象的数组,而不是它包含在一个对象中,该对象应该具有原始未过滤/已排序集合中项目总数的计数.
几乎所有其他工作都按预期工作,我可以使用$filter,$top,$skip和$orderby.我还没有尝试过其他任何事情.我还尝试返回一个硬编码的实体列表,而不是DbSet< Company>但这没有任何区别.
任何人都可以告诉我我需要做些什么才能让它发挥作用?贝娄是回购所需的所有代码,我只展示了令人尊敬的代码(至少我认为是相关的代码).如果还有什么我需要展示请问.
packages.config
<package id="Microsoft.AspNet.WebApi" version="5.2.3" />
<package id="Microsoft.AspNet.OData" version="6.0.0" />
<package id="Microsoft.OData.Core" version="7.0.0" />
<package id="Microsoft.OData.Edm" version="7.0.0" />
公司模式
public sealed class Company {
public int CompanyId { get; set; }
public string Name { get; set; }
public CompanyState State { get; set; } // a simple int enum
public DateTime CreatedOn { get; set; }
}
WebApiConfig.cs
public static void Register(HttpConfiguration config) {
config.Count().Filter().OrderBy().Expand().Select().MaxTop(null);
config.MapODataServiceRoute("odata", "odata", GetModel());
}
public static IEdmModel GetModel() {
var builder = new ODataConventionModelBuilder();
builder.EnableLowerCamelCase();
var companySet = builder.EntitySet<Model.Company>("Company").EntityType.HasKey(x => x.CompanyId);
return builder.GetEdmModel();
}
CompanyController.cs
[ODataRoutePrefix("Company")]
public sealed class CompanyController : ApiController {
private DbContext context;
public CompanyController(DbContext context) {
this.context = context;
}
[EnableQuery] // also tried with [EnableQuery(MaxNodeCount = 50, MaxTop = 100, PageSize = 100)]
[ODataRoute]
[HttpGet]
public IHttpActionResult Get()
{
return Ok(context.Set<Company>());
}
}
测试网址
http://localhost:35743/odata/Company/?$count=true&$top=3
结果
[{"companyId":2,"name":"Company 1","state":1,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":3,"name":"Mars","state":0,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":4,"name":"Veronica","state":0,"createdOn":"2016-11-12T21:10:41"}]
预期成绩:
{
"@odata.context":"some local url",
"@odata.count": 9,
"value": [{"companyId":2,"name":"Company 1","state":1,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":3,"name":"Mars","state":0,"createdOn":"2016-11-12T21:10:41"}
,{"companyId":4,"name":"Veronica","state":0,"createdOn":"2016-11-12T21:10:41"}]
}
解决方法:
我没有从正确的控制器类型继承,我应该继承自ODataController而不是ApiController.
public sealed class CompanyController : ODataController
这样做解决了我面临的问题和奇怪的副作用,就像不被忽视的属性一样.
内容总结
以上是互联网集市为您收集整理的c# – 忽略Web API OData v4 $count = true全部内容,希望文章能够帮你解决c# – 忽略Web API OData v4 $count = true所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。