从 Asp.Net Core AppSettings 获取值

Posted

技术标签:

【中文标题】从 Asp.Net Core AppSettings 获取值【英文标题】:Get values from Asp.Net Core AppSettings 【发布时间】:2021-01-05 13:36:48 【问题描述】:

在 Asp.Net Core 3.1 应用程序中,我在 AppSettings 上有以下部分:

  "Logins": [
    
      "Name": "Facebook",
      "Id": "fb_id",
      "Secret": "fb_secret"
    ,
    
      "Name": "Google",
      "Id": "go_id",
      "Secret": "go_secret"
    
  ]

我正在尝试获取值,例如 Facebook 的 ID,所以我尝试了:

Configuration.GetValue<String>("Logins:Facebook:Id")

但这行不通……我怎样才能得到这些值?

【问题讨论】:

LoginsFacebook 是部分。而不是读取字符串,为什么不读取整个Facebook 对象呢?或者一次读取整个数组?您可以使用 GetBind 在启动时加载强类型对象,向 DI 注册并根据需要注入它们 你应该可以使用Configurrattion.GetSection("Logins").Get&lt;MyLogin[]&gt;()来加载整个数组 【参考方案1】:

所有 ASP.NET Core 配置都转换为键值对。在您的示例中,您最终会得到如下所示的键值对:

Logins:0:Name = Facebook Logins:0:Id = fb_id Logins:0:Secret = fb_secret Logins:1:Name = Google Logins:1:Id = go_id Logins:1:Secret = go_secret

如图所示,没有名为 Logins:Facebook:Id 的键,这是因为 JSON 结构使用数组。如果您想按名称定位提供程序,请更新 JSON 以使用以下结构:

"Logins": 
  "Facebook": 
    "Id": "fb_id",
    "Secret": "fb_secret"
  ,
  "Google": 
    "Id": "go_id",
    "Secret": "go_secret"
  

这将创建您期望的键值对,例如:

Logins:Facebook:Id = fb_id Logins:Facebook:Secret = fb_secret

另外,因为这些值已经是字符串,如果你愿意,你可以使用类似这样的东西来读取值:

Configuration["Logins:Facebook:Id"]

【讨论】:

以上是关于从 Asp.Net Core AppSettings 获取值的主要内容,如果未能解决你的问题,请参考以下文章

在 asp net core 控制台应用程序中读取 appsettings

将文件从 ASP.NET Core Web api 发布到另一个 ASP.NET Core Web api

从 ASP.NET Core 3.1 升级到 ASP.NET 5.0 后,User.Claims 为空

从 ASP.NET Core Blazor 中的 .NET 方法调用 JavaScript 函数

从 ASP.NET MVC 迁移到 ASP.NET Core MVC

如何从 ASP.NET MVC 到 ASP.NET Core Web API 的 PUT?