Jac*_*cky 29 c# asp.net-core asp.net-core-1.0
首先,我的主要目的是动态地为我的应用程序设置IP和端口.
我正在使用IConfiguration
注入一个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();
Run Code Online (Sandbox Code Playgroud)
在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);
}
Run Code Online (Sandbox Code Playgroud)
我的appsettings.json:
{
"WebProtocolSettings": {
"Url": "127.0.0.1",
"Port": 5050
}
}
Run Code Online (Sandbox Code Playgroud)
我的WebProtocolSettings.cs:
public class WebProtocolSettings
{
public string Url { get; set; }
public int Port { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Suk*_*and 126
在.NET 6中
var builder = WebApplication.CreateBuilder(args);
// Using the GetValue<type>(string key) method
var configValue = builder.Configuration.GetValue<string>("Authentication:CookieAuthentication:LoginPath");
// or using the index property (which always returns a string)
var configValue = builder.Configuration["Authentication:CookieAuthentication:LoginPath"];
Run Code Online (Sandbox Code Playgroud)
Tse*_*eng 40
您必须在main方法中构建配置,获取该部分并将其绑定到您的模型.没办法解决它.
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();
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是将配置传递给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();
}
Run Code Online (Sandbox Code Playgroud)
或者在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();
}
Run Code Online (Sandbox Code Playgroud)
.UseConfiguration
(Tseng 的替代答案)是最简单的方法,但请注意,以这种方式配置时,在运行时对配置文件所做的更改不会应用于您的 IConfiguration 对象。要保持配置动态,您必须使用.ConfigureAppConfiguration
- 但是您必须额外时间构建配置以在Main()
. 但是,您可以重用配置它的代码。
ASP.NET 核心 2.2:
public static void Main(string[] args)
{
IConfigurationBuilder configBuilderForMain = new ConfigurationBuilder();
ConfigureConfiguration(configBuilderForMain);
IConfiguration configForMain = configBuilderForMain.Build();
// ... use configForMain to read config here ...
var host = new WebHostBuilder()
.ConfigureAppConfiguration(ConfigureConfiguration)
// ... the rest of it ...
.Build();
}
public static void ConfigureConfiguration(IConfigurationBuilder config)
{
config.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
16930 次 |
最近记录: |