我有用于电子邮件设置的模型
public class EmailSettingsModel {
public string MailServer { get; set; }
public int MailPort { get; set; }
public string SenderName { get; set; }
public string Sender { get; set; }
public string Password { get; set; }
}
我在Azure密钥保险库中放置了秘密价值
MailServer:smtp.gmail.com; MailPort:587; SenderName:SenderName;发件人:[email protected];密码:123!2019#
在Startup.cs
文件中,我放置了代码,并在运行时注册它:
public Startup(IConfiguration configuration) {
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services) {
//this appSetting can return value from Azure Key Vault, the secret key.
var appSetting = Configuration.GetValue<string>("AzureKeyVaultEmail");
services.Configure<EmailSettingsModel>(Configuration.GetSection("AzureKeyVaultEmail"));
services.AddSingleton<IEmailSender, EmailSender>();
services.AddOptions();
services.AddMvc();
}
用于课堂注射
public class EmailSender : IEmailSender
{
private readonly EmailSettingsModel _emailSettings;
public EmailSender (IOptions<EmailSettingsModel> emailSettings) {
_emailSettings = emailSettings.Value;
}
}
但是_emailSettings
总是null
。对于“ _emailSettings”,它假定返回值
MailServer = smtp.gmail.com
MailPort = 587
SenderName = SenderName
Sender = [email protected]
Password = 123!2019#
为什么_emailSettings
总是返回null
?我想念什么吗?我尝试使用this作为参考
从问题中提到的代码开始,如果您已经为Azure密钥保险库编写了有效的配置(下面将是类似下面的标准,希望它添加了,就没有解释。)>
var azureServiceTokenProvider = new AzureServiceTokenProvider(); var keyVaultClient = new KeyVaultClient( new KeyVaultClient.AuthenticationCallback( azureServiceTokenProvider.KeyVaultTokenCallback)); config.AddAzureKeyVault( vaultConfig.AzureVaultUrl, keyVaultClient, new DefaultKeyVaultSecretManager());
也可以从密钥库中读取复杂的对象,我建议您编写如下内容:
services.AddSingleton<EmailSettingsModel >(sp => { var resultJson = Configuration.GetSection("AzureKeyVaultEmail").Value; return JsonConvert.DeserializeObject<EmailSettingsModel>(resultJson); });
也正如我在问题中看到的那样,字符串看起来不像是有效的json格式:
MailServer:smtp.gmail.com; MailPort:587; SenderName:SenderName; Sender:[email protected];
请以有效格式进行更改,它应该可以工作。
希望有帮助。
在Startup.cs中,我使用下面的代码注入EmailSettingsModel
并添加到服务中: