我可以从ac#9记录的自动生成方法中隐藏敏感属性值吗?

c#

c#-9.0

我正在构建一个用户管理系统,其中包含一个向其发送命令的域主机。record由于init-only 属性和生成的辅助方法,这些命令都是s 。但是,我很快就遇到了这种方法的问题,例如LoginUserCommand.

command.ToString() 返回如下内容(添加格式):

LoginUserCommand { 
    Identity = 10000000-1111-2222-3333-444444444444,
    CorrelationId = 20000000-1111-2222-3333-444444444444,
    Timestamp = 2013-07-26T16:45:20Z,
    IssuingUserId = 30000000-1111-2222-3333-444444444444,
    EntityId = a80c081c-cf91-4304-9baa-20fb20c8d9f7,
    IPAddress = 127.0.0.1,
    Password = ThisIsAPr0blem
}

显然,我可以通过例如覆盖重要ToString()的类来解决这个问题。天真地,我可能会做类似的事情

public override string ToString()
{
    return base.ToString()
        .Replace(Password, "********");
}

但我想知道我是否忽略了一些让生成的ToString()方法屏蔽Password属性值的内置方法。

回答

您可以with使用语法重新映射您的记录并PrintMembers改为使用,我认为这更清晰:

public override string ToString()
{
    var builder = new StringBuilder();
    
    (this with { Password = null }).PrintMembers(builder);

    return builder.ToString();
}

也有人提议引入诸如[PrintMembersIgnore]记录之类的属性,但没有实现类似的属性。然而,它可以通过代码生成来解决,这是 dotnet 团队建议的方法(请参阅线程中的评论),为此已经启动了一个项目。


以上是我可以从ac#9记录的自动生成方法中隐藏敏感属性值吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>