根据用户更改ViewModel

时间:2018-01-08 21:02:28

标签: c# asp.net-core

我在Asp Net Core中有一个API,我想根据正在调用的用户更改呼叫的响应。

例如,我们有两个客户

SuperClientDoesManyThings

PublicClient

我有一个UserViewModel,其中包含用户的所有数据。

UserViewModel

  • 名称
  • 地址
  • SuperSecretNoOneCanSee

如果客户端是SuperClientDoesManyThings,我想传递UserViewModel而不做任何更改。

如果客户端是PublicClient,我想隐藏SuperSecretNoOneCanSee,最好不要重写UserViewModel(我想避免重复)

1 个答案:

答案 0 :(得分:1)

如果我理解正确,你实际上是在谈论序列化。你有一个' ViewModel':

public class UserViewModel
{
    public string Name { get; set; }
    public string Address { get; set; }
    public string SuperSecretNoOneCanSee { get; set; }
}

在控制器中,您可以根据呼叫客户端设置值。对于 PublicClient ,您应省略SuperSecretNoOneCanSee。如果您为两个客户端定义了不同的范围,那么您可以执行以下操作:

var isPublicClient = User.HasClaim("scope", "PublicClient");
if (isPublicClient)
    return new UserViewModel { Name = "my name", Address = "my address" };
else
    return new UserViewModel { Name = "my name", Address = "my address", SuperSecretNoOneCanSee = "secret" };

这可能会导致 PublicClient 的以下字符串:

{ "Name": "my name", "Address": "my address", "SuperSecretNoOneCanSee": null }

或者:

{ "Name": "my name", "Address": "my address" }

这取决于json序列化器设置。

在第一种情况下,您可以看到该字段存在,但它永远不会有值。在第二种情况下,你不会看到它存在。但这并不重要。最重要的是,您不必从视图模型中实际删除该字段。

相关问题