使用配置文件中的“UseUrl(..)”设置
本文关键字:设置 UseUrl 配置文件 | 更新日期: 2023-09-27 18:07:49
我有一个Asp.net核心应用程序,代码如下:
Program.cs
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseUrls("http://*:5000")
......
我不想硬编码端口号5000。如何从配置文件中读取它?
startup.cs使用配置文件进行一些设置。代码应该在program.cs中复制吗?但是如何得到IHostingEnvironment env
呢?
Startup.cs
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);
builder.AddEnvironmentVariables();
Configuration = builder.Build();
}
可以在main方法中创建IConfiguration
实例并将其用于主机配置。此外,您可以直接使用:
public static void Main(string[] args)
{
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
//.AddJsonFile("hosting.json", optional: true)
//.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
//.AddCommandLine(args)
//.AddEnvironmentVariables()
.Build();
var host = new WebHostBuilder()
.UseUrls(<values from config>);
}
此外,可以直接使用.UseConfiguration(config)
扩展方法:
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
在本例中,您的配置文件应该包含"server. conf"。url参数。对于您的情况:
"server.urls": "http://*:5000"
还需要注意的是,当你直接运行app时,你可以通过命令行传递port:
dotnet run --server.urls=http://0.0.0.0:5001
读取配置值如上面提到的@Set,但在CreateHostBuilder()
中使用它适用于WebHost。
private static string GetHostPort()
{
var config = new ConfigurationBuilder()
.AddJsonFile(SelfHostSettings, optional: false, reloadOnChange: false)
.Build();
return config["HostPort"] ?? "8080";
}
private static IHostBuilder CreateHostBuilder(string[] args)
{
var hostPort = GetHostPort();
return Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(GetConfig)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseUrls($"http://localhost:{hostPort}");
webBuilder.UseStartup<Startup>();
})
.UseWindowsService();
}
请注意,尝试从Main()
读取配置默认目录为%windir%'system32
,但从CreateHostBuilder()
调用相同的目录被设置为应用程序目录。
覆盖url(监听端口5020):
$ dotnet run --urls=http://*:5020
http/https: $ dotnet run --urls="http://*:5020;https://*:5021"
您可以通过Kestrel选项设置url:
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(hostBuilder =>
{
hostBuilder.UseKestrel((builderContext, kestrelOptions) =>
{
kestrelOptions.ListenAnyIP(builderContext.Configuration.GetValue<int>("Port"));
});
}
);
可以看到,您可以通过构建器上下文访问配置,并从中获取任何信息。包括端口。