. net Core pass配置部分从IIS



在appsettingsjson文件中我有:

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

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

builder.Services.Configure<DatabaseSettings>(
builder.Configuration.GetSection("DataSource"));
public class DatabaseSettings
{
public string ConnectionString { get; set; } = null!;
public string DatabaseName { get; set; } = null!;
public string CollectionName { get; set; } = null!;
}

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

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文件中存储db信息。我想从IIS托管这个。net core应用,所以我想从IIS发送这个配置信息。有办法做到这一点吗?

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

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

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

可以替换appsettings中的值。.AddEnvironmentVariables();"在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

env变量有一个命名约定,例如ConnectionString属性的env名称应该是

DataSource__ConnectionString

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

最新更新