前言
在使用ASP.NET Core 3.1開發時,需要配置服務器監聽的埠和協議,官方幫助檔案進行簡單說明,檔案中提到了4種指定URL的方法
- 設定
ASPNETCORE_URLS環境變數; - 使用
dotnet --urls命令列引數; - 使用
urls作為鍵進行配置; - 使用
UseUrls擴展方法;
為便于講清楚URLs設定方法,創建名為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#url-prefixes)
格式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<Startup>();
// 使用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<Startup>();
// 配置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
微信掃描二維碼關注我的公眾號“GIS學習班”
本文作者:GIS學習班
本文鏈接:https://www.cnblogs.com/gyhgis/p/15517043.html
著作權宣告:本文來自博客園,轉載請注明原文鏈接
支持博主:如果本文恰好可以幫到您,可以【推薦】一下,也可以打賞鼓勵博主
打賞支持轉載請註明出處,本文鏈接:https://www.uj5u.com/net/353565.html
標籤:.NET技术
