ASP.NET|ASP.NET Core设置URLs的五种方法
目录
- 前言
- URL格式
- 前提条件
- 方法1 使用环境变量
- 方法2 使用命令行参数
- 方法3 使用配置文件
- 方法4 使用UseUrls
- 方法5 使用Kestrel
- 优先级
- 总结
前言 在使用ASP.NET Core 3.1开发时,需要配置服务器监听的端口和协议,官方帮助文档进行简单说明,文档中提到了4种指定URL的方法
- 设置
ASPNETCORE_URLS
环境变量; - 使用
dotnet --urls
命令行参数; - 使用
urls
作为键进行配置; - 使用
UseUrls
扩展方法;
AspNetCoreUrl
的ASP.NET Core Web API程序进行说明,默认情况下,启动ASP.NET Core后,监听以下URLs:?http://localhost:5000/
?https://localhost:5001/
URL格式 主要有三种URL格式表达方式,可以查看官方文档(https://docs.microsoft.com/zh-cn/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1)
格式1:
{scheme}://{loopbackAddress}:{port}
,例如http://localhost:5000/
、https://localhost:5001/
格式2:
{scheme}://{IPAddress}:{port}
,例如http://127.0.0.1:5000/
、https://192.168.1.100:5001/
格式3:
{scheme}://*:{port}
,例如http://*:5000/
、https://domain.com:5001/
前提条件 在开始测试几种URLs设置方法前,需要先生成
AspNetCoreUrl
程序,然后在生成的根目录下打开命令行工具进行相应的测试文章图片
如图,我这里的程序根目录为
D:\AspNetCoreUrl\AspNetCoreUrl\bin\Debug\netcoreapp3.1
,使用的终端为微软官方的Windows PowerShell方法1 使用环境变量 在不修改
AspNetCoreUrl
任何源代码的情况下(即创建项目时的程序默认状态)生成程序,定位到生成的根目录下,打开命令行终端文章图片
# 环境变量仅在当前命令行窗口生效$Env:ASPNETCORE_URLS = "http://localhost:7000; https://localhost:7010"# 或者使用DOTNET_URLS环境变量同样可生效$Env:DOTNET_URLS = "http://localhost:8000; https://localhost:8010"# 运行AspNetCoreUrl程序dotnet AspNetCoreUrl.dll
如果使用Windows命令行(即cmd命令行),使用下面的方式设置
# 环境变量仅在当前命令行窗口生效set ASPNETCORE_URLS=http://localhost:7000; https://localhost:7010# 将ASPNETCORE_URLS变量保存到用户环境变量中setx ASPNETCORE_URLS "http://localhost:7000; https://localhost:7010"# 加/m参数,将ASPNETCORE_URLS变量保存到系统环境变量中setx ASPNETCORE_URLS "http://localhost:7000; https://localhost:7010" /m# 运行AspNetCoreUrl程序dotnet AspNetCoreUrl.dll
注意:使用setx设置环境变量后,需要打开新的Windows命令行窗口才会使用环境变量生效
在Linux系统中使用以下命令设置环境变量
# 环境变量仅在当前终端生效,关闭终端后需要重新设置export ASPNETCORE_URLS=http://localhost:7000; https://localhost:7010
方法2 使用命令行参数 在生成程序的根目录下,使用
dotnet --urls
命令,并带上urls参数dotnet AspNetCoreUrl.dll --urls http://localhost:7001; https://localhost:7011
文章图片
方法3 使用配置文件 在生成程序的根目录下,打开
appsettings.json
文件,添加url配置项,然后双击AspNetCoreUrl.exe
运行{"urls":"http://localhost:7002; http://localhost:7012"}
文章图片
运行结果如下图
文章图片
方法4 使用UseUrls 这种方法需要修改源代码,打开
Program.cs
文件,修改CreateHostBuilder
方法内容,主要是添加UseUrls扩展方法然后生成程序。public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup(); // 使用UseUrls设置监听的端口和协议webBuilder.UseUrls("http://localhost:7003", "https://localhost:7013"); });
文章图片
注意:运行前需要将
appsettings.json
文件恢复到默认状态,即没有配置urls的状态,否则配置文件中设置会覆蓋代码中的方法。方法5 使用Kestrel 这种方法并不在官方文档中,因为该方法仅限于使用Kestrel的时候生效,在创建ASP.NET Core应用程序时,默认使用Kestrel来托管应用,使用这种方法也有相应的应用场景,这里简单介绍下该方法的使用
打开
Program.cs
文件,修改CreateHostBuilder
方法内容public static IHostBuilder CreateHostBuilder(string[] args) =>Host.CreateDefaultBuilder(args).ConfigureWebHostDefaults(webBuilder =>{webBuilder.UseStartup(); // 配置Kestrel服务webBuilder.UseKestrel(kestrelServerOptions =>{kestrelServerOptions.ListenLocalhost(7004); kestrelServerOptions.ListenLocalhost(7014, listenOptions => listenOptions.UseHttps()); }); });
文章图片
优先级 前面介绍的5种方法都在独立运行,如果将这5种方法同时用上,会有什么样的效果呢,下面来测试下,为了便于测试,每种方法都使用了不同的端口进行区分,下面显示了使用全部方法的运行结果:
文章图片
可以看到,生效的是使用Kestrel方法,现在将Kestrel这种注释掉,运行结果如下:
文章图片
可以看到此时生效的是使用命令行参数方法,如果不使用命令行参数方法,运行结果如下:
文章图片
生效的是配置文件中的设置,现在删除配置文件中urls的配置,运行结果如下:
文章图片
生效的是UseUrls扩展方法,现在注释掉UseUrls方法代码,运行结果如下:
文章图片
生效的是环境变量,如果不设置环境变量,则使用默认值,即
http://localhost:5000/
和https://localhost:5001/
。总结 本文介绍了ASP.NET Core几种常用的设置URLs的方法,大家可以根据项目实际情况选择其中一种或几种,如果同时使用几种URLs设置方法,则需要留意配置的优先级问题,经过测试得出
Kestrel > 命令行 > 配置文件 > UseUrls > 环境变量 > 默认值
如果你想自己试一试,代码地址:
gitee:https://gitee.com/gyhgis/AspNetCoreUrl
github:https://github.com/gyhgis/AspNetCoreUrl
【ASP.NET|ASP.NET Core设置URLs的五种方法】到此这篇关于ASP.NET Core设置URLs的五种方法的文章就介绍到这了,更多相关ASP.NET Core设置URLs 内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- 第6.2章(设置属性)
- 15、IDEA学习系列之其他设置(生成javadoc、缓存和索引的清理等)
- 关于Core|关于Core Image
- performSelectorOnMainThread:withObject:waitUntilDone:参数设置为NO或YES的区别
- ASP.NET|ASP.NET Core应用开发思维导图
- spring|spring boot中设置异步请求默认使用的线程池
- Python绘制小红花
- day|day 28 设置路由表
- 运行报错Cannot|运行报错Cannot find module '@babel/compat-data/corejs3-shipped-proposals’
- flutter设置沉浸式状态栏