使用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.cshosting.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 配置

使用nuget包向appsettings.json添加配置

使用appsettings.json配置Kestrel监听端口Dotnet core 2 preview 2

如何使用 .NET Core 根据发布配置文件更新 appsettings.json?

为 ASP.NET Core 配置引用 appsettings.json 中的另一个 json 文件

ASP.NET Core读取appsettings.json配置文件信息