基于身份验证序列化DTO

本文关键字:DTO 序列化 身份验证 | 更新日期: 2023-09-27 18:05:22

我的Web API控制器应该根据用户试图获取的模型是否属于他返回不同的模型。

例如:

class Customer {
    public string Id { get; set; }
    public int UserId { get; set; }
    public string Name { get; set; }
    public decimal Revenue { get; set; }
}

对应的动作是Api/Customers/1

现在,如果该模型属于当前调用操作的用户,我希望返回所有字段。然而,如果其他人调用相同的操作,他应该只看到IdName字段。

我知道你可以返回一个接口并选择基于身份验证级别的实现,但我想知道是否有一些更简单的东西,如[JsonIgnore],但基于访问级别来完成相同的?它还可以帮助我减少代码重复。

实现我想要做的事情的最优雅的方式是什么?

基于身份验证序列化DTO

我认为你可以使用JSON的条件序列化。.NET(如果您使用的是JSON.NET)。这个链接可以帮助你更多

To conditionally serialize a property add a boolean method with the same name as 
the property and then prefixed the method name with ShouldSerialize. 
The result of the method determines whether the property is serialized. 
If the method returns true then the property will be serialized, if it returns false
and the property will be skipped.

我能想到的另一件事是重写Object.ToString()方法在你的类将返回JSON根据你的需要。您仍然需要指定条件,并且条件返回您选择的JSON字符串。