【问题标题】:Can I set listen URLs in appsettings.json in ASP.net Core 2.0 Preview?我可以在 ASP.net Core 2.0 Preview 中的 appsettings.json 中设置监听 URL 吗?
【发布时间】:2017-10-22 09:43:12
【问题描述】:

我正在创建一个 ASP.net Core 2.0 应用程序以在 .net Core 2.0 运行时上运行,目前两者都处于预览版中。但是,我无法弄清楚如何让 Kestrel 使用默认的 http://localhost:5000 侦听 URL 以外的其他内容。

我可以在 Google 上讨论的大多数文档都谈到了 server.urls 设置,即使在 1.0 预览版中,它似乎也已更改为 urls,但是两者都不起作用(打开调试日志记录让 Kestrel 告诉我不要听端点已配置)。

很多文档还谈到了hosting.json,并且我不能使用默认的 appsettings.json。但是,如果我比较推荐的加载新配置的方法,这看起来与新的 WebHost.CreateDefaultBuilder 方法所做的非常相似,只是它加载了 appsettings.json。

我目前不了解 appsettings.json 和 IConfigureOptions<T> 之间的关系(如果有的话),所以我的问题可能源于对 KestrelServerOptionsSetup 的实际作用缺乏了解。

【问题讨论】:

标签: asp.net-core .net-core appsettings kestrel-http-server


【解决方案1】:

我得到了它的工作

public static IWebHost BuildWebHost(string[] args) => 
        WebHost.CreateDefaultBuilder(args)
            .UseConfiguration(new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile("hosting.json", optional: true)
                .Build()
            )
            .UseStartup<Startup>()
            .Build();

还有hosting.json

{ "urls": "http://*:5005;" }

【讨论】:

  • 谢谢。我误会了CreateDefaultBuilder使用ConfigureAppConfiguration来加载appsettings.json,和UseConfiguration不一样。
  • 我正在使用 .NET 5,当我创建新的 MVC 应用程序时,没有 hosting.json 文件。我应该创建它还是设置 URL 的过时方式?
【解决方案2】:

要在 appsettings.json 中设置监听 URL,请添加“Kestrel”部分:

"Kestrel": {
    "EndPoints": {
        "Http": {
            "Url": "http://localhost:5000"
        }
    }
}

参考:https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-2.2

【讨论】:

  • 它会影响在服务器实例上的部署吗?如果我还在服务配置中设置了 ASPNETCORE_URLS,优先级或顺序如何?
  • 看起来 ASPNETCORE_URLS(环境变量)的优先级高于 appsettings.json - 请参阅 devblogs.microsoft.com/premier-developer/…
  • 也为我工作。谢谢你。我希望 Kestrel 使用动态端口,然后我想以编程方式获取该端口。 "Url": "http://*:0" 做到了。
【解决方案3】:

像以前一样为我工作

WebHost.CreateDefaultBuilder(args)
    .UseConfiguration( new ConfigurationBuilder().AddCommandLine(args).Build() )
    .UseStartup<Startup>()
    .Build();

然后

dotnet myapp.dll --urls "http://*:5060;"

【讨论】:

    【解决方案4】:

    以上都不适合我。这个对我有用:

    public static IWebHost BuildWebHost(string[] args) =>
                WebHost.CreateDefaultBuilder(args)
                    .UseStartup<Startup>()
                .UseKestrel(options =>
                {
                    options.Listen(System.Net.IPAddress.Loopback, 44306, listenOptions =>
                    {
                        listenOptions.UseHttps("mysertificate.pfx", "thecertificatePassword");
                    });
                })
            .Build();
    

    (把44306换成自己喜欢的端口)

    这个StackOverflow answer可能会有很多帮助

    【讨论】:

      猜你喜欢
      • 2017-12-15
      • 2017-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多