加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net-web-api – 在ASP.NET WebAPI OData中返回子元素

发布时间:2020-12-16 03:28:17 所属栏目:asp.Net 来源:网络整理
导读:我正在使用最新的ASP.Net WebAPI Nightly版本(日期为2013-01-16). 我有一个简单的EF数据库第一个模型,目前有两个实体 – 患者和访问.每位患者可以多次访问. 我希望能够查询我的患者列表,并让每位患者的访问实体在线返回.我知道WebAPI的OData实现还不支持$exp
我正在使用最新的ASP.Net WebAPI Nightly版本(日期为2013-01-16).

我有一个简单的EF数据库第一个模型,目前有两个实体 – 患者和访问.每位患者可以多次访问.

我希望能够查询我的患者列表,并让每位患者的访问实体在线返回.我知道WebAPI的OData实现还不支持$expand.我希望这只意味着不支持可选的客户端控制扩展,并且我可以强制扩展服务器端.

目前我没有进行任何内联访问.

例如,我的PatientController的()Get()方法看起来像

[Queryable(AllowedQueryOptions=AllowedQueryOptions.Supported)]
public override IQueryable<Patient> Get()
{
    var query = this.entities.Patients.Include("Visits");
    return query;  
}

我已经验证了针对我的数据库执行的查询确实包含访问信息.

要使用公开的OData服务作为示例,如果您在http://services.odata.org/OData/OData.svc/使用该服务,则可以获得供应商列表.这是http://http://services.odata.org/OData/OData.svc/Suppliers.
您还可以要求提供包含使用http://http://services.odata.org/OData/OData.svc/Suppliers?$expand=Products的产品列表的供应商列表

单步执行ASP.NET代码(通过符号服务器)我已经到了System.Web.Http.OData.Formatter.Serialization.ODataEntityTypeSerializer,可以看到它是CreatePropertyBag方法,它构建了要序列化的属性列表,只是不包括导航属性,除了被写为NavigationLinks之外,它们似乎在其他任何地方都没有被枚举.

我对ASP.NET世界一般都很陌生,并花了一周左右的时间了解事情的发展方向(特别是2012年底对OData所做的更改以及2013年迄今为止的进一步更改) .

我怀疑如果要修改ODataEntityTypeSerializer(我很乐意尝试)将这些额外的信息嵌入到适当的位置(在每个导航链接中作为嵌套的内联Feed尽可能地告诉我),那么我将被设置.

问题:

>我是否忽略了一些明显的东西,我可以设置一个标志来打开这种行为?我可以看到为什么,如果这样的标志存在,它将默认关闭(EF延迟加载,这个标志不会很好)
>如果#1不是,我可以使用其他一些ODataEntityTypeSerializer吗?如果是这样,我该如何切换到它?
>如果#2不是,那么我应该开始编写自己的指针?有没有我可以在自己的序列化程序中替换的地方,或者我必须维护自己的ASP.NET扩展项目的分支(而不是运行时项目)

非常感谢!

解决方法

在我们支持OData的事物列表中,$expand非常高.但据我所知,我们没有任何标志可以在服务器端打开它.格式化程序当前不允许您替换自己的序列化程序.所以我担心你在此期间唯一的选择就是创建一个fork并添加对$expand的支持.如果您设法让它工作,请考虑以我们的方式发送拉取请求:

http://aspnetwebstack.codeplex.com/SourceControl/network

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读