OData多个DTO用于同一实体

时间:2016-10-18 12:42:59

标签: c# asp.net-web-api odata wcf-data-services

在我的ODATA web api v4中,我试图允许多个DTO用于单个实体。

ODataModelBuilder builder = new ODataConventionModelBuilder();
var version = builder.MaxDataServiceVersion;
builder.EntitySet<PersonModelAdminDTO>("PersonModel").EntityType.HasKey(p => p.RecordId);
builder.EntitySet<PersonModelBasicDTO>("PersonModel").EntityType.HasKey(p => p.RecordId);

我已经尝试了上面的代码,但它已经添加了实体。

基本上,因为我不想将PersonModel的所有属性公开给Basic用户,所以我创建了单独的DTO。

我不想将PersonModelAdminDTO和PersonModelBasicDTO分别显示给客户端元数据,因为这会让它变得混乱。

---编辑----

继续我的尝试的建议 https://github.com/OData/ODataSamples/tree/master/WebApi/v4/DynamicEdmModelCreation

略微修改

await SendQuery("/odata/mydatasource/Products?$select=ID", "Query the Products entity set.");

似乎存在漏洞:

stackoverflow.com/questions/29308157 /

github.com/OData/WebApi/issues/175

1 个答案:

答案 0 :(得分:0)

你只能在元数据中添加其中一个,所以我认为你有两个选择:

  1. 您可以添加完整对象,具体取决于用户,只填充他们有权访问的属性。这可能是最简单的事情,但它确实意味着属性将在元数据中

  2. 您可以在每个请求上创建模型,并检查它是哪种类型的用户来确定您添加的DTO。有一个动态模型构建here的示例,但它并不以权限为中心