使用appsettings.json配置Kestrel监听端口 Dotnet core 2 预览版 2

37

据我所知,为了正确地设置ASP Dotnet Core 2 preview 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的标准方法吗?

5个回答

65

如已在被接受的答案评论中提到,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)

12

2.0版本中已经取消了通过appsettings.json配置Kestrel的支持。

请参见这个问题评论:

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"); - dotnet-provoke
6
当2.1版本发布时,通过配置支持Kestrel的功能将恢复,并且默认情况下开启开发中的HTTPS,此时以下内容将变得多余:https://blogs.msdn.microsoft.com/webdev/2018/02/02/asp-net-core-2-1-roadmap/#security。 - marcusturewicz

4

我正在使用 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;"
}

这是我在Core 1.1中配置Kestrel的类似方式,这种方式是可行的,但我已经在多个地方阅读到未来的做法应该是使用appsettings.json中的Kestrel部分。https://codingblast.com/asp-net-core-2-preview/ - Niklas Gislum
我看了那个视频,看起来很简单。我也试着用同样的方法,但是我也无法让它工作。还有其他人成功了吗? - sshirley
我也遇到了asp.net core 2.0的这个问题。无论我在appsettings.json中放什么都没有被使用。我不理解,因为在新的asp.net core中,默认配置生成器应该默认读取appsettings。 - marcusturewicz
1
@tura08,可以使用appsettings.json,请参见此处:https://dev59.com/iKXja4cB1Zd3GeqPX-GK - Jawad Al Shaikh

2
要使用Kestrel运行Visual Studio,只需编辑appsettings.json并添加以下配置(在NetCore 2.0和2.1中测试通过):
"profiles" : {
    "Kestrel": {
      "commandName": "Project",
      "launchBrowser": true,
      "applicationUrl": "http://localhost:6969/"
    }
}

0

我遇到了同样的问题,我的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>();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接