.Net Webapi使用Odata v4和ViewModels

时间:2019-05-22 19:38:51

标签: asp.net-core asp.net-web-api2 odata

我刚刚开始使用Odata,我必须说我真的很喜欢它。 $ fetch,$ select,$ expand等。真是太神奇了。但是,我并不是很了解如何将odata与视图模型绑定。我对数据进行整形感兴趣的原因之一是因为odata似乎不容易支持隐藏/忽略属性。我也不相信向客户提供比当时更多的信息。

例如,您创建一个包含密码字段的用户对象。

public class User
{
    public string FirstName { get; set; }
    public string LastName{ get; set; }
    public string Email { get; set; }
    public string UserName { get; set; }
    public string Password { get; set; } 
}

但是您需要提供用户列表。自然,您不想列出密码字段。您可以通过编程方式排除该字段,例如:

var users= modelBuilder.EntitySet<User>("Users");
 users.EntityType.Ignore(usr => usr.password);

或者您可以在类本身中装饰它:

[IgnoreDataMember]
public string Password { get; set; } // Not visible in the EDM

问题是,如果我了解正确的情况,这两者都会以全局方式影响模型。

因此,例如,如果用户需要更改其密码,则现在无法使用User类来进行此操作。

如果我实现视图模型,似乎也会破坏odata提供的许多功能。

就像我说的那样,我对odata还是陌生的,只是很难理解如何为客户创建数据。

任何可以提供的指导都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

如前所述,最好不要隐藏密码字段,因为它是有效的用户字段。您需要在数据模型中引入/定义权限。这样,对象/字段仅显示给授权用户。