带有“用户机密”的ASP.NET Core应用程序仅在macOS命令行上失败

时间:2018-04-30 16:50:23

标签: asp.net-core-2.0

我正在使用dotnet-user-secrets和ASP.NET Core 2.1.4应用程序。

要明确的是,这个问题是关于从macOS 中的命令行调用dotnet run;在Windows中为同一应用程序调用{​​{1}}时,此问题不存在。此外,从Visual Studio中运行应用程序在macOS和Windows上都按预期工作。

在命令行键入dotnet run会返回预期的输出:

dotnet user-secrets list

我还可以按预期访问TokenProviderOptions:SecretKey = … TokenProviderOptions:Issuer = … TokenProviderOptions:Audience = … 文件夹中的secrets.json文件:

~/.microsoft/usersecrets/<userSecretsId>

以下是我如何访问{ "TokenProviderOptions": { "SecretKey": "…", "Issuer": "…", "Audience": "…" } } 内的秘密:

Startup.cs

正如我之前提到的,这在Windows中的命令提示符和Visual Studio中没有任何问题。而且,从macOS中的Visual Studio,我可以调试并查看包含这三个项目的// Configure tokens var tokenOptions = Configuration .GetSection("TokenProviderOptions") .GetChildren() .ToList(); string secretKey = tokenOptions.Single(x => x.Key.Equals("SecretKey")).Value, issuer = tokenOptions.Single(x => x.Key.Equals("Issuer")).Value, audience = tokenOptions.Single(x => x.Key.Equals("Audience")).Value; 列表。但是,当我在终端中输入tokenOptions时,我在第一个dotnet run处收到此错误:

.Single()

我是否缺少额外的步骤来从macOS命令行成功运行?

1 个答案:

答案 0 :(得分:2)

秘密经理的目的只是为了开发。因此,只有在ASPNETCORE_ENVIRONMENT设置为Development时,它才有效。这可以在您的环境变量中完成。

如果您不想修改环境变量,可以在program.cs文件中使用以下命令:

public static IWebHost BuildWebHost(string[] args)
{

    var config = new ConfigurationBuilder().AddUserSecrets("myid").Build();

    return WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(config)
            .UseStartup<Startup>()