gpt4 book ai didi

.net - 带有反射提供程序的 WCF OData 服务

转载 作者:行者123 更新时间:2023-12-04 15:15:53 25 4
gpt4 key购买 nike

我们需要为 Activity Feed 提供 API(想想 Facebook),我们决定尝试使用 OData。我们使用 .NET,所以我们选择了 WCF 数据服务,但我们不使用 Entity Framework (或任何其他 ORM),因此我们将使用反射提供程序。因为我们的检索方法有复杂的业务逻辑,所以我们决定将它们公开为服务操作。但是,我们希望将删除/更新和单个实体选择公开为普通的 OData REST 资源。我的问题是我们如何为反射提供程序实现一个数据源,该数据源限制对集合的访问,但允许访问单个实体(通过键请求),允许 DELETE/PUT/POST 动词并允许访问单个实体的子集合(即服务/类别(1)/产品)。基本上我只想限制对基本集合的访问(即服务/类别或服务/产品)

最佳答案

这里没有很好的答案。
您可以在 InitializeService(..) 中使用两个设置

config.SetEntitySetAccessRule("Feed", EntitySetRights.ReadSingle);
config.SetEntitySetPageSize("Feed", 1);
不幸的是,两者都不完全符合您的要求:
  • EntitySetRights.ReadSingle限制您只能从该集合中返回一个对象。哪个失败,因为它不允许/Categories(1)/Products 并且它还允许/Categories?$filter=... 返回一行。
  • SetEntitySetPageSize将命中服务器的初始负载量限制为仅一条记录,但您可以按照 $skiptoken 一次获取一条记录的其余数据,就像 (1) 它允许任意查询而不仅仅是关键谓词。

  • 这让您只有一种现实的选择。访问 LINQ 表达式并确定您是否允许尝试的内容。
    由于您使用的是反射提供程序,因此在传递它们之前,您基本上需要包装从“上下文”类返回的 IQueryables 并查找无效查询。
    不适合胆小的人。
    如果你决定走这条路,你会找到我的 IQueryable wrapping example有用,您应该查看 Viteks blog post series on Data Service expressions也。
    希望这可以帮助
    Alex(OData 项目经理)

    关于.net - 带有反射提供程序的 WCF OData 服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3734725/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com