使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2
Using appsettings.json to configure Kestrel listen port Dotnet core 2 preview 2
据我所知,为 ASP Dotnet Core 2 预览版 1/2 设置监听端口的正确方法是在 appsettings.json 中创建一个 Kestrel 部分,格式如下:
"Kestrel": {
"EndPoints": { //Could also be Endpoints, it's a bit unclear
"Http": {
"Address": "127.0.0.1",
"Port": 9001 //the port you want Kestrel to run on
},
我曾尝试在 Debian 机器上设置示例 Web 应用程序,但是当我启动该应用程序时,它会显示该应用程序正在默认端口 5000 上列出..
我知道 appsettings.json 已读取,因为当我将日志记录级别更改为 Trace 时,我会在启动时获得更多信息,包括未找到端点并且应用程序将使用标准 5000 端口。
我试图在 Github 上搜索 aspnet 源代码,我可以找到一个从配置中读取 Kestrel 部分的区域 (https://github.com/aspnet/Identity/blob/e38759b8a2de1b7a4a1c19462e40214b43c1cf3b/samples/IdentityOIDCWebApplicationSample/MetaPackage/KestrelServerOptionsSetup.cs),但正如您所看到的那样就像一个示例项目。
我错过了什么,这不是在 ASP Dotnet core 2 中配置 Kestrel 的标准方法吗?
我正在使用 Program.cs
和 hosting.json
文件来配置 Kestrel。示例:
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true, reloadOnChange: true)
.Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>();
hosting.json:
{
"urls": "http://localhost:4444;http://localhost:4445;"
}
以上是最新版本 dotnet core 的示例。
对于早期版本:
hosting.json:
{
"server.urls": "http://localhost:4444;http://localhost:4445;"
}
通过 appsettings.json 对 Kestrel 配置的支持已在 2.0 中删除。
见this发表评论:
kestrel config file support was cut from 2.0.0. Config values need to be read manually in your initialization code.
要解决这个问题,您可以在 program.cs 中执行类似的操作:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup < Startup > ()
.UseKestrel((hostingContext, options) =>
{
if (hostingContext.HostingEnvironment.IsDevelopment) {
options.Listen(IPAddress.Loopback, 9001);
options.Listen(IPAddress.Loopback, 9002, listenOptions => {
listenOptions.UseHttps("certificate.pfx", "password");
});
}
})
.Build();
要使用 Kestrel 运行 Visual Studio,只需编辑 appsettings.json 并添加这样的配置(使用 NetCore 2.0 和 2.1 测试) :
"profiles" : {
"Kestrel": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:6969/"
}
}
我遇到了同样的问题,我在 appsettings.json 中的 Kestrel 配置没有被提取。从 this article 关于从 asp.net 核心 2.0 迁移到 2.1,我将引导代码更新为如下所示,它对我有用。
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
如已接受答案的评论中所述,2.1 支持 appsettings.json,请参阅 https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#security
工作 appsettings.json:
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5555"
}
}
}
这是 Program.cs 使用(由“dotnet new webapi”创建):
WebHost.CreateDefaultBuilder(args)
相关源码在GitHub
https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L163
options.Configure(builderContext.Configuration.GetSection("Kestrel"));
和https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L169
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
据我所知,为 ASP Dotnet Core 2 预览版 1/2 设置监听端口的正确方法是在 appsettings.json 中创建一个 Kestrel 部分,格式如下:
"Kestrel": {
"EndPoints": { //Could also be Endpoints, it's a bit unclear
"Http": {
"Address": "127.0.0.1",
"Port": 9001 //the port you want Kestrel to run on
},
我曾尝试在 Debian 机器上设置示例 Web 应用程序,但是当我启动该应用程序时,它会显示该应用程序正在默认端口 5000 上列出..
我知道 appsettings.json 已读取,因为当我将日志记录级别更改为 Trace 时,我会在启动时获得更多信息,包括未找到端点并且应用程序将使用标准 5000 端口。
我试图在 Github 上搜索 aspnet 源代码,我可以找到一个从配置中读取 Kestrel 部分的区域 (https://github.com/aspnet/Identity/blob/e38759b8a2de1b7a4a1c19462e40214b43c1cf3b/samples/IdentityOIDCWebApplicationSample/MetaPackage/KestrelServerOptionsSetup.cs),但正如您所看到的那样就像一个示例项目。
我错过了什么,这不是在 ASP Dotnet core 2 中配置 Kestrel 的标准方法吗?
我正在使用 Program.cs
和 hosting.json
文件来配置 Kestrel。示例:
var config = new ConfigurationBuilder()
.SetBasePath(Directory.GetCurrentDirectory())
.AddJsonFile("hosting.json", optional: true, reloadOnChange: true)
.Build();
var host = new WebHostBuilder()
.UseConfiguration(config)
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseStartup<Startup>();
hosting.json:
{
"urls": "http://localhost:4444;http://localhost:4445;"
}
以上是最新版本 dotnet core 的示例。
对于早期版本:
hosting.json:
{
"server.urls": "http://localhost:4444;http://localhost:4445;"
}
通过 appsettings.json 对 Kestrel 配置的支持已在 2.0 中删除。
见this发表评论:
kestrel config file support was cut from 2.0.0. Config values need to be read manually in your initialization code.
要解决这个问题,您可以在 program.cs 中执行类似的操作:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup < Startup > ()
.UseKestrel((hostingContext, options) =>
{
if (hostingContext.HostingEnvironment.IsDevelopment) {
options.Listen(IPAddress.Loopback, 9001);
options.Listen(IPAddress.Loopback, 9002, listenOptions => {
listenOptions.UseHttps("certificate.pfx", "password");
});
}
})
.Build();
要使用 Kestrel 运行 Visual Studio,只需编辑 appsettings.json 并添加这样的配置(使用 NetCore 2.0 和 2.1 测试) :
"profiles" : {
"Kestrel": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:6969/"
}
}
我遇到了同样的问题,我在 appsettings.json 中的 Kestrel 配置没有被提取。从 this article 关于从 asp.net 核心 2.0 迁移到 2.1,我将引导代码更新为如下所示,它对我有用。
public static void Main(string[] args)
{
CreateWebHostBuilder(args).Build().Run();
}
public static IWebHostBuilder CreateWebHostBuilder(string[] args)
{
return WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>();
}
如已接受答案的评论中所述,2.1 支持 appsettings.json,请参阅 https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#security
工作 appsettings.json:
"Kestrel": {
"EndPoints": {
"Http": {
"Url": "http://localhost:5555"
}
}
}
这是 Program.cs 使用(由“dotnet new webapi”创建):
WebHost.CreateDefaultBuilder(args)
相关源码在GitHub https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L163
options.Configure(builderContext.Configuration.GetSection("Kestrel"));
和https://github.com/aspnet/MetaPackages/blob/master/src/Microsoft.AspNetCore/WebHost.cs#L169
config.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)