从用户机密中获取值以在 dotnet CLI 中使用

Ast*_*phe 7 entity-framework command-line-interface .net-core

如何从用户机密中提取值以在 dotnet 命令中使用?

目前我能做的最好的事情是:

$c = dotnet user-secrets list 
Run Code Online (Sandbox Code Playgroud)

显示:AppSettings:MyConnectionString =“连接字符串的值”

$c.GetType() //tells me BaseType = System.Object, Name = String, etc.
Run Code Online (Sandbox Code Playgroud)

现在我可以尝试提取连接字符串的值,但这似乎不是一个好方法。

我想在命令中使用用户密码:

dotnet ef dbcontext scaffold <MyConnectionString> Microsoft.EntityFrameworkCore.SqlServer -o Models
Run Code Online (Sandbox Code Playgroud)

如果我手动输入它,那么数据库凭据将存储在命令行历史记录中,并且我将在 Visual Studio 中收到一条警告,了解如何通过将其包含在我的配置文件中来保护潜在的敏感信息。但是,我想使用用户机密进行开发,而不是将连接字符串添加到我的配置文件中。

Ste*_*ens 4

您可以dotnet user-secrets list --json获取机器可读格式的值。然后,您可以使用 PowerShellConvertFrom-Json将输出转换为 ,PSCustomObject其中每个密钥都可以作为NoteProperty.

$secrets = dotnet user-secrets list --json | ConvertFrom-Json
dotnet ef dbcontext scaffold $secrets.'AppSettings:MyConnectionString' ...
Run Code Online (Sandbox Code Playgroud)

(仅当名称中包含非字母数字字符时,才需要在秘密名称周围加引号。)

注意

由于某种难以理解的原因,JSON 由//BEGIN和包裹//END

$secrets = dotnet user-secrets list --json | ConvertFrom-Json
dotnet ef dbcontext scaffold $secrets.'AppSettings:MyConnectionString' ...
Run Code Online (Sandbox Code Playgroud)

PowerShell 7 会忽略这些注释,但如果您使用的是 Windows PowerShell,则会收到错误消息。

ConvertFrom-Json:无效的 JSON 原语:。

解决此错误的一个可能的解决方法是删除//BEGIN//END使用该-replace运算符。另一个解决方法是跳过第一行和最后一行。

# Using Windows PowerShell
$json = dotnet user-secrets list --json
$secrets = $json | % { $_ -replace '//(BEGIN|END)' } | ConvertFrom-Json
# or
$secrets = $json | select -Skip 1 | select -SkipLast 1 | ConvertFrom-Json
Run Code Online (Sandbox Code Playgroud)