当前位置 : 主页 > 网络编程 > ASP >

基于 .NET 6 的ASP.NET Core启动地址配置方法及优先级顺序

来源:互联网 收集:自由互联 发布时间:2023-01-30
目录 前言: 一、设置方法 ​1. applicationUrl 属性​ ​2.环境变量​ ​3.命令行参数​ ​4. UseUrls 方法​ .NET 5 版本 .NET 6 版本 ​5. UseKestrel 方法​ ​6. WebApplication.Urls.Add 方法​ ​7. app
目录
  • 前言:
  • 一、设置方法
    • ​1. applicationUrl 属性​
    • ​2.环境变量​
    • ​3.命令行参数​
    • ​4. UseUrls 方法​
      • .NET 5 版本
      • .NET 6 版本
    • ​5. UseKestrel 方法​
      • ​6. WebApplication.Urls.Add 方法​
        • ​7. appsettings.json 文件​
        • 二、优先级
          • 三、结论

            前言:

            上次,我们讨论了如何通过配置或代码方式修改启动地址:《​ ​ASP.NET Core启动地址配置方法及优先级顺序​​》。不过是基于 .NET 5 版本的。

            由于 .NET 6 使用了最小 WEB API, 配置方式已经部分发生了变化。

            一、设置方法

            ​1. applicationUrl 属性​

            launchSettings.json 文件中的 applicationUrl 属性,但是仅在本地开发计算机上使用:

            "profiles": {
                "WebApplication1": {
                    ...
                    "applicationUrl": "http://localhost:5100",
                }
            }

            ​2.环境变量​

            环境变量ASPNETCORE_URLS,有多个设置位置,下面演示的是使用 launchSettings.json 文件:

            "profiles": {
                "WebApplication1": {
                    ...
                    "environmentVariables": {
                        "ASPNETCORE_URLS": "http://localhost:5200"
                    }
                }
            }

            ​3.命令行参数​

            命令行参数 --urls,有多个设置位置,下面演示的是使用 launchSettings.json 文件:

            "profiles": {
                "WebApplication1": {
                    ...
                    "commandLineArgs": "--urls http://localhost:5300",
                }
            }

            ​4. UseUrls 方法​

            .NET 5 版本

            修改 ConfigureWebHostDefaults 方法:

            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                        webBuilder.UseUrls("http://localhost:5400");
                    });

            .NET 6 版本

            对应的方法为 ​WebApplicationBuilder​.WebHost.UseUrls:

            var builder = WebApplication.CreateBuilder(args);
            
            builder.WebHost.UseUrls("http://localhost:5400");

            ​​但是,运行后不起作用。​​

            ​​结果发现这是 .NET 6 的 BUG​​ (Builder.WebHost.UseUrls does not seem to override default url),并将在 6.0.3 中修复:https://github.com/dotnet/aspnetcore/issues/38185

            ​5. UseKestrel 方法​

            .NET 5 版本:

            修改ConfigureWebHostDefaults方法:

            public static IHostBuilder CreateHostBuilder(string[] args) =>
                Host.CreateDefaultBuilder(args)
                    .ConfigureWebHostDefaults(webBuilder =>
                    {
                        webBuilder.UseStartup<Startup>();
                        webBuilder.UseKestrel(options=> options.ListenLocalhost(5500, opts => opts.Protocols = HttpProtocols.Http1));
                    });

            .NET 6 版本:

            对应的方法为 ​WebApplicationBuilder​.WebHost.ConfigureKestrel:

            var builder = WebApplication.CreateBuilder(args);
            builder.WebHost.ConfigureKestrel(options => options.ListenLocalhost(5500, opts => opts.Protocols = HttpProtocols.Http1));

            ​6. WebApplication.Urls.Add 方法​

            .NET 6 版本

            这是 .NET 6 下增加的新方法:

            var app = builder.Build();
            app.Urls.Add("http://localhost:5600");

            ​7. appsettings.json 文件​

            可以在 appsettings.json 文件中设置 Kestrel 端口:

            {
              "Kestrel": {
                "Endpoints": {
                  "Https": {
                    "Url": "https://*:5701"
                  },
                  "Http": {
                    "Url": "http://*:5700"
                  }
                }
              }
            }

            二、优先级

            通过将上述设置方式进行组合,发现优先级顺序如下:

            • WebApplicationBuilder.WebHost.ConfigureKestrel 方法 / appsettings.json 文件 (​2者可同时起作用)
            • WebApplication.Urls.Add 方法
            • 命令行参数 --urls
            • 环境变量 ASPNETCORE_URLS
            • applicationUrl 属性
            • 默认值

            三、结论

            如果在同一台机器上运行多个 ASP.NET Core 实例,使用默认值肯定不合适。

            由于​WebApplicationBuilder​.WebHost.ConfigureKestrel/WebApplication.Urls.Add 方法不能被覆盖,而环境变量 ASPNETCORE_URLS 容易造成全局影响。

            ​​建议:始终使用appsettings.json 文件配置启动地址。

            到此这篇关于基于 .NET 6 的ASP.NET Core启动地址配置方法及优先级顺序的文章就介绍到这了,更多相关ASP.NET Core启动地址配置内容请搜索自由互联以前的文章或继续浏览下面的相关文章希望大家以后多多支持自由互联!

            上一篇:.NetMVC将Controller数据传递到View
            下一篇:没有了
            网友评论