使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2
Posted
技术标签:
【中文标题】使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2【英文标题】:Using appsettings.json to configure Kestrel listen port Dotnet core 2 preview 2 【发布时间】:2017-12-25 22:46:06 【问题描述】:据我了解,为 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 机器上设置示例 webapp,但是当我启动应用程序时,它写出应用程序在端口 5000 上列出,默认端口..
我知道 appsettings.json 已读取,因为当我将日志记录级别更改为 Trace 时,我会在启动时获得更多信息,包括未找到 Endpoints 并且应用程序将使用标准 5000 端口。
我曾尝试在 Github 上搜索 aspnet 源代码,我可以找到从配置 (https://github.com/aspnet/Identity/blob/e38759b8a2de1b7a4a1c19462e40214b43c1cf3b/samples/IdentityOIDCWebApplicationSample/MetaPackage/KestrelServerOptionsSetup.cs) 中读取 Kestrel 部分的区域,但您可以看到它看起来像一个示例项目。
我错过了什么,这不是在 ASP Dotnet core 2 中配置 Kestrel 的标准方法吗?
【问题讨论】:
【参考方案1】:正如对已接受答案的评论中所述,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)
【讨论】:
【参考方案2】:通过 appsettings.json 配置 Kestrel 的支持已在 2.0 中删除。
见this问题评论:
kestrel 配置文件支持已从 2.0.0 中删除。需要在初始化代码中手动读取配置值。
要解决这个问题,您可以在 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();
【讨论】:
.UseKestrel((hostingContext, options) => var env = hostingContext.HostingEnvironment; 比:var env = Environment.GetEnvironmentVariable("ASPNETCORE_ENVIRONMENT"); 这将在 2.1 发布时变得多余,因为通过配置对 Kestrel 的支持将回来,并且开发中的 HTTPS 默认情况下将开启blogs.msdn.microsoft.com/webdev/2018/02/02/…。【参考方案3】:我正在使用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;"
【讨论】:
这是我在核心 1.1 中配置 Kestrel 的类似方式,我可以这样做,但我已经阅读了多个地方,未来的做法应该是使用 Kestrel appsettings.json 中的部分。 codingblast.com/asp-net-core-2-preview 我看过那个视频,看起来很简单。我一直在尝试使用相同的方法,但我也无法让它发挥作用。其他人有这方面的运气吗? 我在使用 asp.net core 2.0 时也遇到了这个问题。我在 appsettings.json 中的任何内容都没有被使用。我不明白,因为默认情况下应该在新的 asp.net 核心中使用默认配置生成器读取 appsettings。 @tura08 ,可以使用 appsettings.json,见这里:***.com/questions/46696115/…【参考方案4】:要使用 Kestrel 运行 Visual Studio,只需编辑 appsettings.json 并添加如下配置(使用 NetCore 2.0 和 2.1 测试):
"profiles" :
"Kestrel":
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "http://localhost:6969/"
【讨论】:
【参考方案5】:我遇到了同样的问题,即我在 appsettings.json 中的 Kestrel 配置没有被拾取。从 this article 关于从 asp.net core 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>();
【讨论】:
以上是关于使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2的主要内容,如果未能解决你的问题,请参考以下文章
在 EF 上下文中使用 appsettings.json 配置
使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2
如何使用 .NET Core 根据发布配置文件更新 appsettings.json?