繁体   English   中英

.NET Core pass 配置部分来自 IIS

[英].NET Core pass configuration section from IIS

在 appsettingsjson 文件中,我有:

  "DataSource": {
    "ConnectionString": "mongodb://localhost:27017",
    "DatabaseName": "Root",
    "CollectionName": "ApiLog"
  },

在 Program.cs 中,我得到这样的数据

builder.Services.Configure<DatabaseSettings>(
    builder.Configuration.GetSection("DataSource"));

DatabaseSettings class 在哪里;

    public class DatabaseSettings
    {
        public string ConnectionString { get; set; } = null!;

        public string DatabaseName { get; set; } = null!;

        public string CollectionName { get; set; } = null!;
    }

然后我可以通过依赖注入访问 DatabaseSettings 的实例,例如:

    public class LogService
    {
        private readonly IMongoCollection<Log> _collection;

        public LogService(
            IOptions<DatabaseSettings> databaseSettings)
        {
            var mongoClient = new MongoClient(
                databaseSettings.Value.ConnectionString);

            var mongoDatabase = mongoClient.GetDatabase(
                databaseSettings.Value.DatabaseName);

            _collection = mongoDatabase.GetCollection<ElekseLog>(
                databaseSettings.Value.CollectionName);
        }
    }

问题是我不想将数据库信息存储在 appsettings json 文件中。 我想从 IIS 托管这个 .net 核心应用程序,所以我想从 IIS 发送这个配置信息。有没有办法实现这个?

一种选择是使用Microsoft.Extensions.Configuration.SystemEnvironment提供程序,以便您可以使用环境变量设置配置值。

然后,您可以在 IIS 服务器上设置环境变量,为您的应用程序提供必要的配置。

另一个选项是Microsoft.Extensions.Configuration.UserSecrets ,它允许您将配置存储在文件系统上的用户位置,而不是 appsettings.json 文件。

您可以通过添加“.AddEnvironmentVariables();”将 appsettings.json 中的值替换为环境变量在 Program.cs 中

  public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
        WebHost.CreateDefaultBuilder(args)
            .ConfigureAppConfiguration((webhostBuilderContext, configurationbuilder) =>
            {
                configurationbuilder.AddJsonFile("appsettings.json")
                .AddEnvironmentVariables();
            })
            .UseStartup<Startup>();


}

此处描述了 ISS 中环境变量的设置: https://stackoverflow.com/a/36836533/5706893

环境变量有一个命名约定,例如,对于 ConnectionString 属性,您的环境名称应该是

DataSource__ConnectionString

更多细节可以在这里找到https://learn.microsoft.com/en-us/as.net/core/fundamentals/configuration/?view=as.netcore-7.0

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM