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

时间:2017-07-20 09:52:59

标签: .net-core kestrel

根据我的理解,为ASP Dotnet Core 2预览1/2设置监听端口的正确方法是在appsettings.json中按以下格式创建一个Kestrel部分:

socketChannel.register(this.selector, SelectionKey.OP_WRITE|SelectionKey.OP_READ);

我试图在Debian机器上设置示例webapp,但是当我启动应用程序时,它写出应用程序在端口5000上列出,默认端口..

我知道appsettings.json已被读取,因为当我将日志记录级别更改为Trace时,我会在启动时获得更多信息,包括没有找到端点,应用程序将使用标准的5000端口。

我试图在Github上搜索aspnet源代码,我可以找到一个从配置中读取Kestrel部分的区域(https://github.com/aspnet/Identity/blob/e38759b8a2de1b7a4a1c19462e40214b43c1cf3b/samples/IdentityOIDCWebApplicationSample/MetaPackage/KestrelServerOptionsSetup.cs),但是你可以看到它看起来像一个示例项目。 / p>

我缺少什么,这不是在ASP Dotnet核心2中配置Kestrel的标准方法吗?

5 个答案:

答案 0 :(得分:24)

如对已接受答案的评论中所述,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"
 }}}

这是针对使用(由“ dotnet new webapi”创建的)Program.cs的:

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)

答案 1 :(得分:9)

通过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();

答案 2 :(得分: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核心的例子。 对于早期版本: hosting.json:

{
  "server.urls": "http://localhost:4444;http://localhost:4445;"
}

答案 3 :(得分:1)

我知道这是一个很老的帖子,但要用红隼运行visual studio。

只需编辑 appsettings.json 并添加如下配置(使用NetCore 2.0和2.1进行测试)

    "profiles" : {
        "Kestrel": {
          "commandName": "Project",
          "launchBrowser": true,
          "applicationUrl": "http://localhost:6969/"
        }
    }

答案 4 :(得分: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>();
    }