c# - Asp.net core 2.0 Configure.Services<model>() 绑定(bind)不适用于用户 secret

标签 c# asp.net-core asp.net-core-mvc .net-core asp.net-core-2.0

我的问题是Configure.Services<model>()没有将我的用户 secret 绑定(bind)到我的类(class)。我的服务中注入(inject)的类始终具有 null 属性。

我的 Secrets.json 看起来像这样:

{
  "OtherSection": {
    "Another": {
      "Prop": "1234"
    }
  },
  "EmailSettings": {
    "Mailgun": {
      "ApiKey": "omitted",
      "BaseUri": "omitted",
      "RequestUri": "omitted",
      "From": "omitted",
      "Smtp": "omitted",
      "SmtpUser": "omitted",
      "SmtpPass": "omitted",
      "SmtpPort": 465
    }
  }
}

我创建了这个用户设置类:

public class MailgunSettings : ISmtpDetails
{
    public string ApiKey { get; set; }
    public string BaseUri { get; set; }
    public string RequestUri { get; set; }
    public string From { get; set; }
    public string Smtp { get; set; }
    public string SmtpUser { get; set; }
    public string SmtpPass { get; set; }
    public int SmtpPort { get; set; }
}

在我的Startup.cs ConfigureServices()我正在像这样注册类(class):

services.Configure<MailgunSettings>(options => Configuration.GetSection("EmailSettings:Mailgun").Bind(options));

我将它注入(inject)到我的 EmailSender 中像这样的服务:

private readonly ISmtpDetails _smtpSettings;

public EmailSender(IOptions<MailgunSettings> smtpSettings)
{
    this._smtpSettings = smtpSettings.Value;
}

smtpSettings.Value的每个属性为空。

我能够访问 Startup.cs 内的配置设置与:

Configuration["EmailSettings:Mailgun:ApiKey"];

我尝试安装以下 nuget 包:

<PackageReference Include="Microsoft.Extensions.Configuration.Binder" Version="2.0.0" />

没有帮助。

我真的不明白为什么它没有绑定(bind)并且没有生成任何错误消息。

有人可以帮忙吗?

最佳答案

尝试不使用 ISmtpDetails 接口(interface):

public class MailgunSettings
{
    public string ApiKey { get; set; }
    public string BaseUri { get; set; }
    public string RequestUri { get; set; }
    public string From { get; set; }
    public string Smtp { get; set; }
    public string SmtpUser { get; set; }
    public string SmtpPass { get; set; }
    public int SmtpPort { get; set; }
}

private readonly MailgunSettings _smtpSettings;

public EmailSender(IOptions<MailgunSettings> smtpSettings)
{
    this._smtpSettings = smtpSettings.Value;
}

如果它有效,那么您需要配置 services.Configure<ISmtpDetails>并注入(inject)IOptions<ISmtpDetails>

我建议您只使用MailgunSettings并摆脱 Interface ISmtpDetails ,不需要接口(interface),因为 .NET Core 已经为您提供了 IOptions<T> Interface .

这里有一篇文章可以检查您的 IOptions 模式:https://andrewlock.net/how-to-use-the-ioptions-pattern-for-configuration-in-asp-net-core-rc2/

关于c# - Asp.net core 2.0 Configure.Services<model>() 绑定(bind)不适用于用户 secret ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46146446/

相关文章:

asp.net-core - 无法使用 Ubuntu 20.04 使 Net5 工作(OpenSSL 连接问题)

c# - DynamicRouteValueTransformer 不存在

c# - 如何在 ASP.NET Core MVC 2.0 的另一个程序集中使用 Controller ?

c# - 如何动态连接 C# 中的 T-SQL 表,来自 ListView 的 COLUMNS

c# - 如何进行多线程安全的原子对象创建和交换

angular - asp net core - 请求的资源上不存在 'Access-Control-Allow-Origin' header

c# - 在授权过滤器之前执行的 ASP.NET Core MVC 操作过滤器

c# - 如何在 C# 中为 switch case 使用多个常量?

c# - 在 Entity Framework Core 2.0 中执行 SQL 命令删除表中的所有数据

c# - 当前上下文中不存在名称 `addtaghelper`