Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-core/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Azure 如何不从用户机密配置中获取空值?_Azure_Asp.net Core_Azure Keyvault - Fatal编程技术网

Azure 如何不从用户机密配置中获取空值?

Azure 如何不从用户机密配置中获取空值?,azure,asp.net-core,azure-keyvault,Azure,Asp.net Core,Azure Keyvault,我想为KeyVault客户端ID等使用用户机密。设置KeyVault时,我从程序.cs调用配置。当我在appsettings.json中添加值时,一切正常,但是如果我删除它并管理用户机密,当我的程序.cs运行时,它总是说null 我在创建的secret.json中有正确的值,带有guid的属性也在我的项目文件中 我还尝试向secret.json添加一个键和值,并尝试从控制器获取它,它也是空的 因此,我的程序中的WebHost.CreateDefaultBuilder似乎没有加载我的secret.

我想为KeyVault客户端ID等使用用户机密。设置KeyVault时,我从
程序.cs
调用配置。当我在
appsettings.json
中添加值时,一切正常,但是如果我删除它并管理用户机密,当我的
程序.cs
运行时,它总是说null

我在创建的
secret.json
中有正确的值,带有guid的属性也在我的项目文件中

我还尝试向
secret.json
添加一个键和值,并尝试从控制器获取它,它也是空的

因此,我的
程序中的
WebHost.CreateDefaultBuilder
似乎没有加载我的
secret.json
文件

如果我在
program.cs
中将
AssUserSecrets
添加到我的
WebHost.CreateDefaultBuilder(args)
中,则没有相同的问题

我使用的是
WebHost.CreateDefaultBuilder
,因此在asp.NETCore2.2中默认使用它

dontnet user-secret list 
还将显示我的
secret.json
文件中的值,因此值就在那里,用户密码已经初始化

dontnet user-secret init
另外,假设它已经设置好了

但在调用my
secret.json
属性时仍然为空

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"]);

                });

公共静态IWebHostBuilder CreateWebHostBuilder(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureServices(服务=>services.AddAutofac())
.ConfigureAppConfiguration((上下文,生成器)=>
{
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.右键单击项目并选择
manageusersecrets
。它将在Visual Studio中打开secrets.json文件,您可以在其中添加机密,并将添加到.csproj文件中

2.添加您希望添加到用户机密中的内容。它包括两种编写json对象和一个简单的键/值对的方法。

3.将用户机密映射到模型

 public class KeyVault
 {
     public string Vault { get; set; }
     public string ClientId { get; set; }
     public string ClientSecret { get; set; }
 }
4.添加配置。 安装软件包Microsoft.VisualStudio.Web.CodeGeneration.Design
Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.UserSecrets

5.绑定值。这是在Startup.cs文件中完成的。

6.使用映射的机密

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));
    }
........
}
公共类HomeController:控制器
{
私人只读密钥库(KeyVault);;
//我已将详细信息注入构造函数
公共家庭控制器(密钥库)
{
//我们想知道twilioAccountDetails是否为null,因此如果为null,则抛出异常
_keyvault=keyvault.Value??抛出新ArgumentException(nameof(keyvault));
}
........
}
7.在
Program.cs
中调用它。


有关如何在.NET核心Web应用程序中使用
用户机密的更多详细信息,请参阅。

它似乎与Microsoft.Extensions.Configuration.AzureKeyVault相关

因为我一加上nuget,它就停止工作了


更新:更多信息。看起来最新的Microsoft.Extensions.Configuration.AzureKeyVault为我降级了一些配置库。然后它就停止工作了

我没有移除它。。。我看到它不见了,所以又把它压了一次。但这不是对我问题的直接回答,所以也许有人把它拿走了?新版本的.net core libs与Microsoft.Extensions.Configuration.AzureKeyVault之间似乎存在冲突,因此我现在使用的是Microsoft.Extensions.Configuration.AzureKeyVault使用的相同版本。