asp.net-core-2.0 - 带有“用户机密”的 ASP.NET Core 应用程序仅在 macOS 命令行上失败
问题描述
我将dotnet-user-secrets与 ASP.NET Core 2.1.4 应用程序一起使用。
需要明确的是,这个问题是关于从macOSdotnet run
中的命令行调用;在 Windows 中调用相同的应用程序时不存在此问题。此外,从 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
:
// 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 中的命令提示符和 Visual Studio 中运行没有问题。而且,从 macOS 中的 Visual Studio,我可以调试并查看tokenOptions
包含三个项目的列表。但是,当我输入dotnet run
终端时,我首先收到此错误.Single()
:
System.InvalidOperationException: Sequence contains no matching element
我是否缺少从 macOS 的命令行成功运行它的额外步骤?
解决方案
秘密管理器旨在仅用于开发。因此,它仅在您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>()
推荐阅读
- laravel - 为什么我不能在 Laravel 中创建 Mock
- sql - SQL计算一阶和二阶之间的平均时间?(根据 min 和 min+1 做 sql 计算?)
- python-3.x - 试图将许多 python 文件导入另一个
- php - 如何在 WooCommerce 中调整字段
- html - 如何以角度解析嵌套的json
- java - 客户端无法使用自签名证书连接到 REST API
- rust - 如何通过 curl 使用 actix-from-data 的映射数组发出 POST 请求?
- asp.net - 如何用我在 iis 服务器上运行的 asp.net 中的自定义值替换缓存控制安全标头值中的私有值
- jquery - jQuery - 有多个总计的总计
- sprite-kit - 如何使用 SpriteKit 在圆上通过给定偏移创建点?