如何从ASP.NET Core中的.json文件中读取AppSettings值

Olu*_*emi 199 .net c# .net-core asp.net-core

我在appsettings/Config .json中设置了我的AppSettings数据,如下所示:

{
  "AppSettings": {
        "token": "1234"
    }
}
Run Code Online (Sandbox Code Playgroud)

我在网上搜索了如何从.json文件中读取AppSettings值,但我无法获得任何有用的信息.

我试过了:

var configuration = new Configuration();
var appSettings = configuration.Get("AppSettings"); // null
var token = configuration.Get("token"); // null
Run Code Online (Sandbox Code Playgroud)

我知道在ASP.NET 4.0中你可以这样做:

System.Configuration.ConfigurationManager.AppSettings["token"];
Run Code Online (Sandbox Code Playgroud)

但是我如何在ASP.NET Core中执行此操作?

Yuv*_*kov 273

这有几个曲折.我已经修改了这个答案,以便与ASP.NET Core 2.0保持同步(截至26/02/2018).

这主要来自官方文档:

要在ASP.NET应用程序中使用设置,建议您仅Configuration在应用程序的Startup类中实例化a .然后,使用"选项"模式访问各个设置.假设我们有一个appsettings.json看起来像这样的文件:

{
  "MyConfig": {
   "ApplicationName": "MyApp",
   "Version": "1.0.0"
   }

}
Run Code Online (Sandbox Code Playgroud)

我们有一个代表配置的POCO对象:

public class MyConfig
{
    public string ApplicationName { get; set; }
    public int Version { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我们构建配置Startup.cs:

public class Startup 
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,appsettings.json将被默认为注册在.NET 2.0的核心.appsettings.{Environment}.json如果需要,我们还可以为每个环境注册一个配置文件.

如果我们想将配置注入控制器,我们需要在运行时注册它.我们这样做Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc();

    // Add functionality to inject IOptions<T>
    services.AddOptions();

    // Add our Config object so it can be injected
    services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
}
Run Code Online (Sandbox Code Playgroud)

我们这样注入:

public class HomeController : Controller
{
    private readonly IOptions<MyConfig> config;

    public HomeController(IOptions<MyConfig> config)
    {
        this.config = config;
    }

    // GET: /<controller>/
    public IActionResult Index() => View(config.Value);
}
Run Code Online (Sandbox Code Playgroud)

Startup类:

public class Startup 
{
    public IConfigurationRoot Configuration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        var builder = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        Configuration = builder.Build();
    }

    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc();

        // Add functionality to inject IOptions<T>
        services.AddOptions();

        // Add our Config object so it can be injected
        services.Configure<MyConfig>(Configuration.GetSection("MyConfig"));
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这段代码与旧的 xml &gt; 你们中有多少人有时间这样做,只是为了保存一个字符串? (8认同)
  • 检索应用程序设置是多么复杂,绝对令人难以置信。 (8认同)
  • 添加nuget`Microsoft.Extensions.Options.ConfigurationExtensions`后,它按预期工作. (4认同)
  • 版本""1.0.0-beta4"`对我的工作不是"1.0.0-alpha4"`.非常感谢! (3认同)
  • 我需要将设置从实用程序类传递到另一层,因此我需要类似此公共静态字符串GetConnectionString(){if(string.IsNullOrEmpty(connectionString)){var builder = new ConfigurationBuilder().AddJsonFile(“ config.json “); 配置= builder.Build(); connectionString = Configuration.Get(“ Data:DefaultConnection:ConnectionString”); 返回connectionString; } (2认同)
  • 我得到`参数2:无法从'Microsoft.Extensions.Configuration.IConfigurationSection'转换为'System.Action <....设置>' (2认同)
  • 关于配置过程逻辑的很好的解释,但它遗漏了一个要点:SetBasePath()和AddJsonFile()是扩展方法,深深地扎根于框架中的单独程序集中。因此,为了开始使用,除了Microsoft.Extensions.Configuration外,还需要安装Microsoft.Extensions.Configuration.FileExtensions和Microsoft.Extensions.Configuration.Json。 (2认同)
  • 您没有展示如何从代码中检索自身的值 (2认同)

hug*_*hug 59

首先:Microsoft.Framework.ConfigurationModel的程序集名称和命名空间已更改为Microsoft.Framework.Configuration.所以你应该使用:例如

"Microsoft.Framework.Configuration.Json": "1.0.0-beta7"
Run Code Online (Sandbox Code Playgroud)

作为一个依赖project.json.如果您没有安装7,请使用beta5或6.然后你可以做这样的事情Startup.cs.

public IConfiguration Configuration { get; set; }

public Startup(IHostingEnvironment env, IApplicationEnvironment appEnv)
{
     var configurationBuilder = new ConfigurationBuilder(appEnv.ApplicationBasePath)
        .AddJsonFile("config.json")
        .AddEnvironmentVariables();
     Configuration = configurationBuilder.Build();
}
Run Code Online (Sandbox Code Playgroud)

如果您想从config.json中检索变量,可以使用以下命令立即获取:

public void Configure(IApplicationBuilder app)
    {
        // Add .Value to get the token string
        var token = Configuration.GetSection("AppSettings:token");
        app.Run(async (context) =>
        {
            await context.Response.WriteAsync("This is a token with key (" + token.Key + ") " + token.Value);
        });
    }
Run Code Online (Sandbox Code Playgroud)

或者您可以创建一个名为AppSettings的类,如下所示:

public class AppSettings
{
    public string token { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并配置如下服务:

public void ConfigureServices(IServiceCollection services)
{       
    services.AddMvc();

    services.Configure<MvcOptions>(options =>
    {
        //mvc options
    });

    services.Configure<AppSettings>(Configuration.GetSection("AppSettings"));
}
Run Code Online (Sandbox Code Playgroud)

然后通过例如这样的控制器访问它:

public class HomeController : Controller
{
    private string _token;

    public HomeController(IOptions<AppSettings> settings)
    {
        _token = settings.Options.token;
    }
}
Run Code Online (Sandbox Code Playgroud)


MDM*_*313 46

对于.NET Core 2.0,情况有所改变.启动构造函数将Configuration对象作为参数,因此ConfigurationBuilder不需要使用.这是我的:

public Startup(IConfiguration configuration)
{
    Configuration = configuration;
}

public IConfiguration Configuration { get; }

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    services.Configure<StorageOptions>(Configuration.GetSection("AzureStorageConfig"));
}
Run Code Online (Sandbox Code Playgroud)

我的POCO是StorageOptions顶部提到的对象:

namespace Brazzers.Models
{
    public class StorageOptions
    {
        public String StorageConnectionString { get; set; }
        public String AccountName { get; set; }
        public String AccountKey { get; set; }
        public String DefaultEndpointsProtocol { get; set; }
        public String EndpointSuffix { get; set; }

        public StorageOptions() { }
    }
}
Run Code Online (Sandbox Code Playgroud)

配置实际上是我appsettings.json文件的一个子部分,名为AzureStorageConfig:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;",
    "StorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=brazzerswebapp;AccountKey=Cng4Afwlk242-23=-_d2ksa69*2xM0jLUUxoAw==;EndpointSuffix=core.windows.net"
  },
  "Logging": {
    "IncludeScopes": false,
    "LogLevel": {
      "Default": "Warning"
    }
  },

  "AzureStorageConfig": {
    "AccountName": "brazzerswebapp",
    "AccountKey": "Cng4Afwlk242-23=-_d2ksa69*2xM0jLUUxoAw==",
    "DefaultEndpointsProtocol": "https",
    "EndpointSuffix": "core.windows.net",
    "StorageConnectionString": "DefaultEndpointsProtocol=https;AccountName=brazzerswebapp;AccountKey=Cng4Afwlk242-23=-_d2ksa69*2xM0jLUUxoAw==;EndpointSuffix=core.windows.net"
  }
}
Run Code Online (Sandbox Code Playgroud)

我唯一要补充的是,由于构造函数已经改变,我还没有测试是否需要为它加载一些额外的东西appsettings.<environmentname>.json而不是appsettings.json.


Ale*_* S. 41

.NET 核心 3.0

也许这不是从appsettings.json获取值的最佳方法,但它很简单,并且可以在我的应用程序中使用!!

文件appsettings.json

{
    "ConnectionStrings": {
        "DefaultConnection":****;"
    }

    "AppSettings": {
        "APP_Name": "MT_Service",
        "APP_Version":  "1.0.0"
    }
}
Run Code Online (Sandbox Code Playgroud)

控制器:

在上面

using Microsoft.Extensions.Configuration;
Run Code Online (Sandbox Code Playgroud)

在您的代码中:

var AppName = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build().GetSection("AppSettings")["APP_Name"];
Run Code Online (Sandbox Code Playgroud)

  • 我发现的唯一适用于 .Net Core Program.cs 文件的方法。必须同意对不同答案的评论:这么多的卷积只是为了获得设置文件。 (6认同)
  • @Essej:您需要安装 Microsoft.Extensions.Configuration.Json nuget 包才能使用 AddJsonFile 方法。 (5认同)
  • 终于有一个简单的解决方案了,谢谢。为什么微软在 Core 中让这变得如此困难? (5认同)
  • ConfigurationBuilder 上不存在 AddJsonFile (3认同)

kod*_*bot 23

如果您只想获取令牌的值,请使用

Configuration["AppSettings:token"]

  • 为此,您需要事先通过 ConfigurationBuilder 初始化一个 IConfiguration 实例。 (4认同)

小智 19

使用Core 2.2,并以最简单的方式...

public IActionResult Index([FromServices] IConfiguration config) 
{
    var myValue = config.GetValue<string>("MyKey");
}
Run Code Online (Sandbox Code Playgroud)

appsettings.json通过构造函数或动作注入自动加载并可用,并且也有一个GetSection方法IConfiguration。无需更改,Startup.cs或者Program.cs您所需要做的只是appsettings.json

  • 更简单: `var myValue = config["MyKey"]` (4认同)
  • ...你可以这样做: config["Storage:ConnectionString"] 来获取 json 中的元素。我可以确认该技术适用于 .net core 3 并适用于构造注入。 (2认同)

Ogg*_*las 13

对于 ASP.NET Core 3.1,您可以遵循以下文档:

https://docs.microsoft.com/en-us/aspnet/core/fundamentals/configuration/?view=aspnetcore-3.1

当您创建新的 ASP.NET Core 3.1 项目或 .NET 5 项目时,您将在以下配置行中看到Program.cs

Host.CreateDefaultBuilder(args)
Run Code Online (Sandbox Code Playgroud)

这可以实现以下功能:

  1. ChainedConfigurationProvider :添加一个现有的 IConfiguration 作为源。在默认配置情况下,添加主机配置并将其设置为应用程序配置的第一个源。
  2. appsettings.json 使用 JSON 配置提供程序。
  3. appsettings.Environment.json 使用 JSON 配置提供程序。例如,appsettings.Production.json 和 appsettings.Development.json。
  4. 应用程序在开发环境中运行时的应用程序机密。
  5. 使用环境变量配置提供程序的环境变量。
  6. 使用命令行配置提供程序的命令行参数。

这意味着您可以IConfiguration使用字符串键注入和获取值,甚至是嵌套值。喜欢IConfiguration ["Parent:Child"];

例子:

appsettings.json

{
  "ApplicationInsights":
    {
        "Instrumentationkey":"putrealikeyhere"
    }
}
Run Code Online (Sandbox Code Playgroud)

WeatherForecast.cs

[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
{
    private static readonly string[] Summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };

    private readonly ILogger<WeatherForecastController> _logger;
    private readonly IConfiguration _configuration;

    public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
    {
        _logger = logger;
        _configuration = configuration;
    }

    [HttpGet]
    public IEnumerable<WeatherForecast> Get()
    {
        var key = _configuration["ApplicationInsights:InstrumentationKey"];

        var rng = new Random();
        return Enumerable.Range(1, 5).Select(index => new WeatherForecast
        {
            Date = DateTime.Now.AddDays(index),
            TemperatureC = rng.Next(-20, 55),
            Summary = Summaries[rng.Next(Summaries.Length)]
        })
        .ToArray();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • @Ogglas...WeatherForecastController() 的调用者如何获取实现 IConfiguration 的类? (2认同)

Teo*_*ahi 10

以下适用于Console Apps;

1-安装以下nugetpackages(.csproj);

<ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Configuration" Version="2.2.0-preview2-35157" />
    <PackageReference Include="Microsoft.Extensions.Configuration.FileExtensions" Version="2.2.0-preview2-35157" />
    <PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="2.2.0-preview2-35157" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

2- appsettings.json在根级别创建.右键单击它并"复制到输出目录"为" 如果更新则复制 ".

3-示例配置文件:

{
  "AppConfig": {
    "FilePath": "C:\\temp\\logs\\output.txt"
  }
}
Run Code Online (Sandbox Code Playgroud)

4- Program.cs

configurationSection.Key并且configurationSection.Value将配置属性.

static void Main(string[] args)
{
    try
    {

        IConfigurationBuilder builder = new ConfigurationBuilder()
            .SetBasePath(Directory.GetCurrentDirectory())
            .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);

        IConfigurationRoot configuration = builder.Build();
        // configurationSection.Key => FilePath
        // configurationSection.Value => C:\\temp\\logs\\output.txt
        IConfigurationSection configurationSection = configuration.GetSection("AppConfig").GetSection("FilePath");  

    }
    catch (Exception e)
    {
        Console.WriteLine(e);
    }
}
Run Code Online (Sandbox Code Playgroud)


Md *_*iar 10

您可以简单地使用...

var configurations = new ConfigurationBuilder().AddJsonFile("appsettings.json").Build();

var db3 = configurations["ConnectionStrings:BookStoresDB2"];
Run Code Online (Sandbox Code Playgroud)


Md *_*iar 9

private readonly ILogger<WeatherForecastController> _logger;

private IConfiguration _configuration;

public WeatherForecastController(ILogger<WeatherForecastController> logger, IConfiguration configuration)
{
    _logger = logger;

    _configuration = configuration;
}

[HttpGet(Name = "GetWeatherForecast")]
public IEnumerable<WeatherForecast> Get()
{
    //You can use any of these

    var db = _configuration.GetSection("ConnectionStrings").GetSection("BookStoresDB2").Value;

    var db1 = _configuration["ConnectionStrings:BookStoresDB2"];

    var db2 = _configuration.GetValue<string>("ConnectionStrings:BookStoresDB2");
}
Run Code Online (Sandbox Code Playgroud)


Alp*_*glu 8

这是 ASP.NET Core 的完整用例!

文章.json

{
  "shownArticlesCount": 3,
  "articles": [
    {
      "title": "My Title 1",
      "thumbnailLink": "example.com/img1.png",
      "authorProfileLink": "example.com/@@alper",
      "authorName": "Alper Ebicoglu",
      "publishDate": "2018-04-17",
      "text": "...",
      "link": "..."
    },
    {
      "title": "My Title 2",
      "thumbnailLink": "example.com/img2.png",
      "authorProfileLink": "example.com/@@alper",
      "authorName": "Alper Ebicoglu",
      "publishDate": "2018-04-17",
      "text": "...",
      "link": "..."
    },
  ]
}
Run Code Online (Sandbox Code Playgroud)

文章容器.cs

{
  "shownArticlesCount": 3,
  "articles": [
    {
      "title": "My Title 1",
      "thumbnailLink": "example.com/img1.png",
      "authorProfileLink": "example.com/@@alper",
      "authorName": "Alper Ebicoglu",
      "publishDate": "2018-04-17",
      "text": "...",
      "link": "..."
    },
    {
      "title": "My Title 2",
      "thumbnailLink": "example.com/img2.png",
      "authorProfileLink": "example.com/@@alper",
      "authorName": "Alper Ebicoglu",
      "publishDate": "2018-04-17",
      "text": "...",
      "link": "..."
    },
  ]
}
Run Code Online (Sandbox Code Playgroud)

启动文件

public class ArticleContainer
{
    public int ShownArticlesCount { get; set; }

    public List<Article> Articles { get; set; }
}

public class Article
{
    public string Title { get; set; }

    public string ThumbnailLink { get; set; }

    public string AuthorName { get; set; }

    public string AuthorProfileLink { get; set; }

    public DateTime PublishDate { get; set; }

    public string Text { get; set; }

    public string Link { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

索引.cshtml.cs

public class Startup
{
    public IConfigurationRoot ArticleConfiguration { get; set; }

    public Startup(IHostingEnvironment env)
    {
        ArticleConfiguration = new ConfigurationBuilder()
            .SetBasePath(env.ContentRootPath)
            .AddJsonFile("articles.json")
            .Build();
    }

    public IServiceProvider ConfigureServices(IServiceCollection services)
    {
        services.AddOptions();

        services.Configure<ArticleContainer>(ArticleConfiguration);
    }
}
Run Code Online (Sandbox Code Playgroud)

索引.cshtml.cs

public class IndexModel : PageModel
{
    public ArticleContainer ArticleContainer { get;set; }

    private readonly IOptions<ArticleContainer> _articleContainer;

    public IndexModel(IOptions<ArticleContainer> articleContainer)
    {
        _articleContainer = articleContainer;
    }

    public void OnGet()
    {
        ArticleContainer = _articleContainer.Value;
    }
}
Run Code Online (Sandbox Code Playgroud)


Jua*_*rra 8

对于ASP.NET Core 6.0,您可以简单地:

应用程序设置.json

{
  "AppSettings": {
        "Token": "1234"
    }
}
Run Code Online (Sandbox Code Playgroud)

测试模型.cs

using Microsoft.Extensions.Configuration

public class TestModel : PageModel
{
    private readonly IConfiguration Configuration;

    public TestModel(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public ContentResult OnGet()
    {
        var myToken = Configuration["AppSettings:Token"];        
        return Content($"myToken value: {myToken}");
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 迄今为止最简单的解决方案。按预期工作 (2认同)

Eri*_*nez 7

我怀疑这是个好习惯,但它在本地有效。如果在发布/部署(到IIS Web服务)时失败,我将对其进行更新。

第1步-将此程序集添加到类的顶部(在我的情况下为控制器类):

using Microsoft.Extensions.Configuration;
Run Code Online (Sandbox Code Playgroud)

第2步-添加此内容或类似内容:

var config = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json").Build();
Run Code Online (Sandbox Code Playgroud)

步骤3-通过执行以下操作来调用密钥的值(返回字符串):

config["NameOfYourKey"]
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你:config["AppSettings:JWT_Secret"] (2认同)

小智 7

只是为了补充尤瓦尔·伊茨查科夫的答案。

您可以不使用构建器功能来加载配置,而只需注入它即可。

public IConfiguration Configuration { get; set; }

public Startup(IConfiguration configuration)
{
   Configuration = configuration;
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*row 7

对于.NET Core 2.0,您可以简单地:

在appsettings.json中声明您的键/值对:

{
  "MyKey": "MyValue"
}
Run Code Online (Sandbox Code Playgroud)

在startup.cs中注入配置服务,并使用该服务获取值

using Microsoft.Extensions.Configuration;

public class Startup
{
    public void Configure(IConfiguration configuration,
                          ... other injected services
                          )
    {
        app.Run(async (context) =>
        {
            string myValue = configuration["MyKey"];
            await context.Response.WriteAsync(myValue);
        });
Run Code Online (Sandbox Code Playgroud)


Gre*_*ory 7

.NET 核心 2.1.0

  1. 在根目录下创建 .json 文件
  2. 在您的代码上:
var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true); 
Run Code Online (Sandbox Code Playgroud)
var config = builder.Build();
Run Code Online (Sandbox Code Playgroud)

3.安装以下依赖:

Microsoft.Extensions.Configuration
Microsoft.Extensions.Configuration.json
Run Code Online (Sandbox Code Playgroud)

4. 然后,重要提示: 右键单击 appsettings.json 文件 -> 单击属性 -> 选择如果更新则复制: 在此处输入图片说明

  1. 最后,你可以这样做:

    配置[“key1”]

考虑到我的配置文件如下所示:

{
    "ConnectionStrings": "myconnection string here",
    "key1": "value here"
}
Run Code Online (Sandbox Code Playgroud)


Ali*_*Ali 7

这对我有用 .Net 5

我有一个 appsettings.development.json 文件。我选择了“开发”环境,这就是我在 development.json 文件中设置的原因。您可以在默认环境下使用 appsettings.josn。

在此处输入图片说明

有了这个配置

在此处输入图片说明

创建了一个具有配置属性的类

在此处输入图片说明

在 Startup 中注册我的电话

在此处输入图片说明

我现在可以在我的控制器中访问

在此处输入图片说明


Ale*_*man 6

除了现有的答案,我想提一提,有时可能是有用的扩展方法用于IConfiguration为简单起见。

我将JWT配置保留在appsettings.json中,因此我的扩展方法类如下所示:

public static class ConfigurationExtensions
{
    public static string GetIssuerSigningKey(this IConfiguration configuration)
    {
        string result = configuration.GetValue<string>("Authentication:JwtBearer:SecurityKey");
        return result;
    }

    public static string GetValidIssuer(this IConfiguration configuration)
    {
        string result = configuration.GetValue<string>("Authentication:JwtBearer:Issuer");
        return result;
    }

    public static string GetValidAudience(this IConfiguration configuration)
    {
        string result = configuration.GetValue<string>("Authentication:JwtBearer:Audience");
        return result;
    }

    public static string GetDefaultPolicy(this IConfiguration configuration)
    {
        string result = configuration.GetValue<string>("Policies:Default");
        return result;
    }

    public static SymmetricSecurityKey GetSymmetricSecurityKey(this IConfiguration configuration)
    {
        var issuerSigningKey = configuration.GetIssuerSigningKey();
        var data = Encoding.UTF8.GetBytes(issuerSigningKey);
        var result = new SymmetricSecurityKey(data);
        return result;
    }

    public static string[] GetCorsOrigins(this IConfiguration configuration)
    {
        string[] result =
            configuration.GetValue<string>("App:CorsOrigins")
            .Split(",", StringSplitOptions.RemoveEmptyEntries)
            .ToArray();

        return result;
    }
}
Run Code Online (Sandbox Code Playgroud)

它节省了很多行,而您只需要编写干净且最少的代码即可:

...
x.TokenValidationParameters = new TokenValidationParameters()
{
    ValidateIssuerSigningKey = true,
    ValidateLifetime = true,
    IssuerSigningKey = _configuration.GetSymmetricSecurityKey(),
    ValidAudience = _configuration.GetValidAudience(),
    ValidIssuer = _configuration.GetValidIssuer()
};
Run Code Online (Sandbox Code Playgroud)

也可以将IConfiguration实例注册为单例并将其注入到您需要的任何地方-我使用Autofac容器,方法如下:

var appConfiguration = AppConfigurations.Get(WebContentDirectoryFinder.CalculateContentRootFolder());
builder.Register(c => appConfiguration).As<IConfigurationRoot>().SingleInstance();
Run Code Online (Sandbox Code Playgroud)

您可以对MS依赖注入执行相同的操作:

services.AddSingleton<IConfigurationRoot>(appConfiguration);
Run Code Online (Sandbox Code Playgroud)


小智 6

聚会超级迟到,但如果有人发现了这一点。

你可以从 Microsoft.Extensions.Configuration 调用 IConfiguration;

public static IConfiguration Configuration { get; }
public static string MyAwesomeString = Configuration.GetSection("appSettings")["MyAwesomeString"].ToString();
Run Code Online (Sandbox Code Playgroud)


Mon*_*ode 5

他们只是不断地改变事情-更新了VS并拥有了整个项目炸弹,正处于恢复的道路上,新的方式看起来像这样:

public Startup(IHostingEnvironment env)
{
    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

    if (env.IsDevelopment())
    {
        // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
        builder.AddUserSecrets();
    }

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();
}
Run Code Online (Sandbox Code Playgroud)

我一直想念这行!

.SetBasePath(env.ContentRootPath)
Run Code Online (Sandbox Code Playgroud)

  • “他们只是不断改变事情”。这。此页面上的几乎每个答案仅适用于特定版本的 .Net Core。 (3认同)

Cod*_*key 5

.NET Core 2.2 方式

(毫无疑问,微软将在下一个 .NET 版本中再次将其更改为完全不同的内容。)

1.appSettings.json

它可能看起来像这样。这里我们将加载Setting1和Setting2

{
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*",
  "Setting1": "abc",
  "Setting2": 123
}
Run Code Online (Sandbox Code Playgroud)

2.AppSettings.cs

POCO类保存Setting1 和Setting2 我们将把 appsettings.json 加载到此类对象中。POCO 类的结构应与 JSON 文件匹配,如果需要,属性可以嵌套在其他属性/类中。

public class AppSettings
{
    public string Setting1 { get; set; }
    public int Setting2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

3 启动.cs

将 appSettings.json 加载到 AppSettings 对象中并开始使用它:

public class Startup
{
    public Startup(IConfiguration configuration)
    {
        AppSettings settings = new AppSettings();

        Configuration = configuration;
        configuration.Bind(settings);

        // Now start using it
        string setting1 = settings.Setting1;
        int setting2 = settings.Setting2;
    }
Run Code Online (Sandbox Code Playgroud)