gpt4 book ai didi

c# - 读取 Main Program.cs 中的 appsettings.json

转载 作者:IT王子 更新时间:2023-10-29 04:24:23 25 4
gpt4 key购买 nike

首先,我的主要目的是为我的应用程序动态设置 IP 和端口。

我正在使用 IConfiguration 注入(inject)一个 json 配置文件,就像提到的一些教程一样。

但是,我无法检索 Program.cs 中的配置,因为我的 WebHostBuilder 将同时使用 StartUp 和 Url。

因此在主机建立时,我的配置中没有任何内容。

WebProtocolSettings settings_Web = new WebProtocolSettings();
var host = new WebHostBuilder()
.UseIISIntegration()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls(settings_Web.Url + ":" + settings_Web.Port)
.Build();

在 Startup.cs 中

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

Configuration = builder.Build();
}

public IConfigurationRoot Configuration { get; set; }

public void ConfigureServices(IServiceCollection services)
{
// Adds services required for using options.
services.AddOptions();

var _WebProtocolSettings = Configuration.GetSection("WebProtocolSettings");

// Register the IConfiguration instance
services.Configure<WebProtocolSettings>(_WebProtocolSettings);
}

我的 appsettings.json:

{
"WebProtocolSettings": {
"Url": "127.0.0.1",
"Port": 5050
}
}

我的 WebProtocolSettings.cs:

public class WebProtocolSettings
{
public string Url { get; set; }
public int Port { get; set; }
}

最佳答案

更新 .Net 6

现在很容易从 ConfigurationManager 中获取任何设置通过调用 GetValue<type>(string key)扩展方法。您也可以使用 Index(string key)返回一个字符串。参见 this answer .


您必须在您的主要方法中构建一个配置,获取该部分并将其绑定(bind)到您的模型。没办法。

public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.AddJsonFile("appsettings.json", optional: false)
.Build();

WebProtocolSettings settings_Web = new WebProtocolSettings();
config.GetSection("WebProtocolSettings").Bind(settings_Web);

var host = new WebHostBuilder()
.UseIISIntegration()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>()
.UseUrls(settings_Web.Url + ":" + settings_Web.Port)
.Build()

host.Run();
}

##更新

另一种方法是将配置传递给 UseConfiguration,如

中所述
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.AddCommandLine(args)
.Build();

var host = new WebHostBuilder()
.UseUrls("http://*:5000")
.UseConfiguration(config)
.UseKestrel()
.Configure(app =>
{
app.Run(context =>
context.Response.WriteAsync("Hello, World!"));
})
.Build();

host.Run();
}

或在 ASP.NET Core > 2.0 中

public static void Main(string[] args)
{
BuildWebHost(args).Run();
}

public static IWebHost BuildWebHost(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true)
.AddCommandLine(args)
.Build();

return WebHost.CreateDefaultBuilder(args)
.UseUrls("http://*:5000")
.UseConfiguration(config)
.Configure(app =>
{
app.Run(context =>
context.Response.WriteAsync("Hello, World!"));
})
.Build();
}

关于c# - 读取 Main Program.cs 中的 appsettings.json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41738692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com