在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