Asp.net core 2.0 ASP.NET核心应用程序,带有;“用户机密”;仅在macOS命令行上失败
我正在使用ASP.NET Core 2.1.4应用程序 明确地说,这个问题是关于在macOS中从命令行调用Asp.net core 2.0 ASP.NET核心应用程序,带有;“用户机密”;仅在macOS命令行上失败,asp.net-core-2.0,Asp.net Core 2.0,我正在使用ASP.NET Core 2.1.4应用程序 明确地说,这个问题是关于在macOS中从命令行调用dotnet run;在Windows中为同一应用程序调用dotnet run时,此问题不存在。此外,在VisualStudio中运行应用程序在macOS和Windows上都能正常工作 在命令行中键入dotnet用户机密列表,将返回预期的输出: TokenProviderOptions:SecretKey = … TokenProviderOptions:Issuer = … TokenPr
dotnet run
;在Windows中为同一应用程序调用dotnet run
时,此问题不存在。此外,在VisualStudio中运行应用程序在macOS和Windows上都能正常工作
在命令行中键入dotnet用户机密列表
,将返回预期的输出:
TokenProviderOptions:SecretKey = …
TokenProviderOptions:Issuer = …
TokenProviderOptions:Audience = …
我还可以按预期访问~/.microsoft/usersecrets/
文件夹中的secrets.json
文件:
{
"TokenProviderOptions": {
"SecretKey": "…",
"Issuer": "…",
"Audience": "…"
}
}
下面是我如何访问Startup.cs中的秘密:
// 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;
正如我前面提到的,在Windows的命令提示符和VisualStudio中运行时没有问题。而且,在macOS的Visual Studio中,我可以调试并查看带有三项的tokenOptions
列表。但是,当我在终端中键入dotnet run
时,我在第一个.Single()
处收到此错误:
要在macOS的命令行上成功运行此功能,我还缺少一个额外的步骤吗?secret manager的设计仅用于开发。因此,它只在
ASPNETCORE\u环境
设置为Development
时起作用。这可以在您的环境变量中完成
如果不希望修改环境变量,可以在program.cs文件中使用以下内容:
public static IWebHost BuildWebHost(string[] args)
{
var config = new ConfigurationBuilder().AddUserSecrets("myid").Build();
return WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()
公共静态IWebHost BuildWebHost(字符串[]args)
{
var config=new ConfigurationBuilder().AddUserSecrets(“myid”).Build();
返回WebHost.CreateDefaultBuilder(args)
.UseConfiguration(配置)
.UseStartup()
感谢您的快速响应!我将ASPNETCORE\u ENVIRONMENT=Development
添加到我的.bash\u profile
中,现在它工作得很好。也许这个环境变量在安装过程中自动添加到Windows中…不确定-很高兴它现在也能在我的macOS上工作。这似乎不是特定于操作系统的。在我解决这个问题之前,我在windows中遇到过一段时间。顺便说一句,我发现Visual Studio在windows上使用了launchSettings.json
文件,该文件已经有“environmentVariables”:{“ASPNETCORE\u ENVIRONMENT”:“Development”}
inside.yep,我注意到了。这就是过去造成很多混乱的原因。虽然这个文件可以让网站正常工作,但这个文件不用于其他命令,如ef迁移。这就是我必须设置环境变量的主要原因。我甚至对此提出了一个问题,并将其放在赏金上
public static IWebHost BuildWebHost(string[] args)
{
var config = new ConfigurationBuilder().AddUserSecrets("myid").Build();
return WebHost.CreateDefaultBuilder(args)
.UseConfiguration(config)
.UseStartup<Startup>()