如何不从用户机密配置中获取空值?
How to not get null values from User secret configs?
我想为 KeyVault clientid 等使用用户机密。我在设置 KeyVault 时从 program.cs
调用我的配置。当我在 appsettings.json
中添加值时,一切正常,但如果我删除它并管理用户机密,当我的 program.cs
是 运行 时,它总是说 null。
而且我在创建的 secret.json
中有正确的值,并且带有 guid 的属性也在我的项目文件中
我还尝试向 secret.json
添加一个键和值,并尝试从控制器获取它,但它也是空的。
所以我的 program.se
中的 WebHost.CreateDefaultBuilder
似乎没有加载我的 secret.json
文件。
如果我在 progam.cs
中将 AssUserSecrets
添加到我的 WebHost.CreateDefaultBuilder(args)
中,则没有相同的问题。
我正在使用 WebHost.CreateDefaultBuilder
所以它应该在 asp .net core 2.2 中默认使用
dontnet user-secret list
Will 还会显示我的 secret.json
文件中的值,所以值就在那里,用户密码已经初始化。
dontnet user-secret init
另外,假设它已经设置好了。
但在调用我的 secret.json
属性时仍然只是 null
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureServices(services => services.AddAutofac())
.ConfigureAppConfiguration((context, builder) =>
{
var config = builder.Build();
var vault = config["KeyVault:Vault"];
builder.AddAzureKeyVault($"https://{config["KeyVault:Vault"]}.vault.azure.net/", config["KeyVault:ClientId"], config["KeyVault:ClientSecret"]);
});
我在我的网站上测试过,效果很好,这里是你可以参考的步骤。
1.Right 单击项目并 select Manage User Secrets
。它将打开 Visual Studio 中的 secrets.json 文件,您可以在其中添加您的机密,并将添加到 .csproj 文件中。
2.Add 您可能希望添加到您的用户机密中的内容。它包括两种编写 json 对象和简单 key/value 对的方法。
3.Mapping 模型的用户机密。
public class KeyVault
{
public string Vault { get; set; }
public string ClientId { get; set; }
public string ClientSecret { get; set; }
}
4.Adding 配置。
安装包 Microsoft.VisualStudio.Web.CodeGeneration.Design
和 Microsoft.Extensions.Configuration
和 Microsoft.Extensions.Configuration.UserSecrets
5.Bind 值。这是在 Startup.cs 文件中完成的。
6.Using 你映射的秘密
public class HomeController : Controller
{
private readonly KeyVault _keyvault;
// I’ve injected twilioAccountDetails into the constructor
public HomeController(IOptions<KeyVault> keyvault)
{
// We want to know if twilioAccountDetails is null so we throw an exception if it is
_keyvault = keyvault.Value ?? throw new ArgumentException(nameof(keyvault));
}
........
}
7.Call 它在 Program.cs
。
更多关于User Secrets in a .NET Core Web App
的使用方法可以参考这个article.
似乎与:Microsoft.Extensions.Configuration.AzureKeyVault
有关
因为我一添加 nuget,它就停止工作了。
更新:更多信息。似乎最新的 Microsoft.Extensions.Configuration.AzureKeyVault 为我降级了一些配置库。然后它停止工作。
我在使用 Host.CreateDefaultBuilder()
时遇到了同样的问题,发现这是因为我的主机环境不是 Development
。
为了解决这个问题,我在 launchSettings.json
中添加了以下部分:
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development"
}
The following defaults are applied to the returned HostBuilder:
- load app IConfiguration from User Secrets when EnvironmentName is 'Development' using the entry assembly
就我而言,我缺少以下 NuGet 包:
Microsoft.Extensions.Configuration.UserSecrets
安装后,它运行良好。
我想为 KeyVault clientid 等使用用户机密。我在设置 KeyVault 时从 program.cs
调用我的配置。当我在 appsettings.json
中添加值时,一切正常,但如果我删除它并管理用户机密,当我的 program.cs
是 运行 时,它总是说 null。
而且我在创建的 secret.json
中有正确的值,并且带有 guid 的属性也在我的项目文件中
我还尝试向 secret.json
添加一个键和值,并尝试从控制器获取它,但它也是空的。
所以我的 program.se
中的 WebHost.CreateDefaultBuilder
似乎没有加载我的 secret.json
文件。
如果我在 progam.cs
中将 AssUserSecrets
添加到我的 WebHost.CreateDefaultBuilder(args)
中,则没有相同的问题。
我正在使用 WebHost.CreateDefaultBuilder
所以它应该在 asp .net core 2.2 中默认使用
dontnet user-secret list
Will 还会显示我的 secret.json
文件中的值,所以值就在那里,用户密码已经初始化。
dontnet user-secret init
另外,假设它已经设置好了。
但在调用我的 secret.json
属性时仍然只是 null
public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureServices(services => services.AddAutofac())
.ConfigureAppConfiguration((context, builder) =>
{
var config = builder.Build();
var vault = config["KeyVault:Vault"];
builder.AddAzureKeyVault($"https://{config["KeyVault:Vault"]}.vault.azure.net/", config["KeyVault:ClientId"], config["KeyVault:ClientSecret"]);
});
我在我的网站上测试过,效果很好,这里是你可以参考的步骤。
1.Right 单击项目并 select Manage User Secrets
。它将打开 Visual Studio 中的 secrets.json 文件,您可以在其中添加您的机密,并将添加到 .csproj 文件中。
2.Add 您可能希望添加到您的用户机密中的内容。它包括两种编写 json 对象和简单 key/value 对的方法。
3.Mapping 模型的用户机密。
public class KeyVault
{
public string Vault { get; set; }
public string ClientId { get; set; }
public string ClientSecret { get; set; }
}
4.Adding 配置。
安装包 Microsoft.VisualStudio.Web.CodeGeneration.Design
和 Microsoft.Extensions.Configuration
和 Microsoft.Extensions.Configuration.UserSecrets
5.Bind 值。这是在 Startup.cs 文件中完成的。
6.Using 你映射的秘密
public class HomeController : Controller
{
private readonly KeyVault _keyvault;
// I’ve injected twilioAccountDetails into the constructor
public HomeController(IOptions<KeyVault> keyvault)
{
// We want to know if twilioAccountDetails is null so we throw an exception if it is
_keyvault = keyvault.Value ?? throw new ArgumentException(nameof(keyvault));
}
........
}
7.Call 它在 Program.cs
。
更多关于User Secrets in a .NET Core Web App
的使用方法可以参考这个article.
似乎与:Microsoft.Extensions.Configuration.AzureKeyVault
有关因为我一添加 nuget,它就停止工作了。
更新:更多信息。似乎最新的 Microsoft.Extensions.Configuration.AzureKeyVault 为我降级了一些配置库。然后它停止工作。
我在使用 Host.CreateDefaultBuilder()
时遇到了同样的问题,发现这是因为我的主机环境不是 Development
。
为了解决这个问题,我在 launchSettings.json
中添加了以下部分:
"environmentVariables": {
"DOTNET_ENVIRONMENT": "Development"
}
The following defaults are applied to the returned HostBuilder:
- load app IConfiguration from User Secrets when EnvironmentName is 'Development' using the entry assembly
就我而言,我缺少以下 NuGet 包:
Microsoft.Extensions.Configuration.UserSecrets
安装后,它运行良好。