【问题标题】:Using appsettings.json to configure Kestrel listen port Dotnet core 2 preview 2使用appsettings.json配置Kestrel监听端口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 的标准方法吗?

【问题讨论】:

    标签: .net-core 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,见这里:stackoverflow.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>();
        }
        

        【讨论】:

          猜你喜欢
          • 2019-04-04
          • 2019-07-06
          • 1970-01-01
          • 2017-10-22
          • 1970-01-01
          • 1970-01-01
          • 2017-12-15
          • 1970-01-01
          • 2018-09-28
          相关资源
          最近更新 更多