ASP.NET Core設(shè)置URLs的五種方法
前言
在使用ASP.NET Core 3.1開發(fā)時,需要配置服務(wù)器監(jiān)聽的端口和協(xié)議,官方幫助文檔進(jìn)行簡單說明,文檔中提到了4種指定URL的方法
- 設(shè)置
ASPNETCORE_URLS環(huán)境變量; - 使用
dotnet --urls命令行參數(shù); - 使用
urls作為鍵進(jìn)行配置; - 使用
UseUrls擴(kuò)展方法;
為便于講清楚URLs設(shè)置方法,創(chuàng)建名為AspNetCoreUrl的ASP.NET Core Web API程序進(jìn)行說明,默認(rèn)情況下,啟動ASP.NET Core后,監(jiān)聽以下URLs:
http://localhost:5000/
https://localhost:5001/
URL格式
主要有三種URL格式表達(dá)方式,可以查看官方文檔(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設(shè)置方法前,需要先生成AspNetCoreUrl程序,然后在生成的根目錄下打開命令行工具進(jìn)行相應(yīng)的測試

如圖,我這里的程序根目錄為D:\AspNetCoreUrl\AspNetCoreUrl\bin\Debug\netcoreapp3.1,使用的終端為微軟官方的Windows PowerShell
方法1 使用環(huán)境變量
在不修改AspNetCoreUrl任何源代碼的情況下(即創(chuàng)建項(xiàng)目時的程序默認(rèn)狀態(tài))生成程序,定位到生成的根目錄下,打開命令行終端

# 環(huán)境變量僅在當(dāng)前命令行窗口生效 $Env:ASPNETCORE_URLS = "http://localhost:7000;https://localhost:7010" # 或者使用DOTNET_URLS環(huán)境變量同樣可生效 $Env:DOTNET_URLS = "http://localhost:8000;https://localhost:8010" # 運(yùn)行AspNetCoreUrl程序 dotnet AspNetCoreUrl.dll
如果使用Windows命令行(即cmd命令行),使用下面的方式設(shè)置
# 環(huán)境變量僅在當(dāng)前命令行窗口生效 set ASPNETCORE_URLS=http://localhost:7000;https://localhost:7010 # 將ASPNETCORE_URLS變量保存到用戶環(huán)境變量中 setx ASPNETCORE_URLS "http://localhost:7000;https://localhost:7010" # 加/m參數(shù),將ASPNETCORE_URLS變量保存到系統(tǒng)環(huán)境變量中 setx ASPNETCORE_URLS "http://localhost:7000;https://localhost:7010" /m # 運(yùn)行AspNetCoreUrl程序 dotnet AspNetCoreUrl.dll
注意:使用setx設(shè)置環(huán)境變量后,需要打開新的Windows命令行窗口才會使用環(huán)境變量生效
在Linux系統(tǒng)中使用以下命令設(shè)置環(huán)境變量
# 環(huán)境變量僅在當(dāng)前終端生效,關(guān)閉終端后需要重新設(shè)置 export ASPNETCORE_URLS=http://localhost:7000;https://localhost:7010
方法2 使用命令行參數(shù)
在生成程序的根目錄下,使用dotnet --urls命令,并帶上urls參數(shù)
dotnet AspNetCoreUrl.dll --urls http://localhost:7001;https://localhost:7011

方法3 使用配置文件
在生成程序的根目錄下,打開appsettings.json文件,添加url配置項(xiàng),然后雙擊AspNetCoreUrl.exe運(yùn)行
{
"urls":"http://localhost:7002;http://localhost:7012"
}

運(yùn)行結(jié)果如下圖

方法4 使用UseUrls
這種方法需要修改源代碼,打開Program.cs文件,修改CreateHostBuilder方法內(nèi)容,主要是添加UseUrls擴(kuò)展方法然后生成程序。
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
// 使用UseUrls設(shè)置監(jiān)聽的端口和協(xié)議
webBuilder.UseUrls("http://localhost:7003", "https://localhost:7013");
});

注意:運(yùn)行前需要將appsettings.json文件恢復(fù)到默認(rèn)狀態(tài),即沒有配置urls的狀態(tài),否則配置文件中設(shè)置會覆蓋代碼中的方法。
方法5 使用Kestrel
這種方法并不在官方文檔中,因?yàn)樵摲椒▋H限于使用Kestrel的時候生效,在創(chuàng)建ASP.NET Core應(yīng)用程序時,默認(rèn)使用Kestrel來托管應(yīng)用,使用這種方法也有相應(yīng)的應(yīng)用場景,這里簡單介紹下該方法的使用
打開Program.cs文件,修改CreateHostBuilder方法內(nèi)容
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
// 配置Kestrel服務(wù)
webBuilder.UseKestrel(kestrelServerOptions =>
{
kestrelServerOptions.ListenLocalhost(7004);
kestrelServerOptions.ListenLocalhost(7014, listenOptions => listenOptions.UseHttps());
});
});

優(yōu)先級
前面介紹的5種方法都在獨(dú)立運(yùn)行,如果將這5種方法同時用上,會有什么樣的效果呢,下面來測試下,為了便于測試,每種方法都使用了不同的端口進(jìn)行區(qū)分,下面顯示了使用全部方法的運(yùn)行結(jié)果:

可以看到,生效的是使用Kestrel方法,現(xiàn)在將Kestrel這種注釋掉,運(yùn)行結(jié)果如下:

可以看到此時生效的是使用命令行參數(shù)方法,如果不使用命令行參數(shù)方法,運(yùn)行結(jié)果如下:

生效的是配置文件中的設(shè)置,現(xiàn)在刪除配置文件中urls的配置,運(yùn)行結(jié)果如下:

生效的是UseUrls擴(kuò)展方法,現(xiàn)在注釋掉UseUrls方法代碼,運(yùn)行結(jié)果如下:

生效的是環(huán)境變量,如果不設(shè)置環(huán)境變量,則使用默認(rèn)值,即http://localhost:5000/和https://localhost:5001/。
總結(jié)
本文介紹了ASP.NET Core幾種常用的設(shè)置URLs的方法,大家可以根據(jù)項(xiàng)目實(shí)際情況選擇其中一種或幾種,如果同時使用幾種URLs設(shè)置方法,則需要留意配置的優(yōu)先級問題,經(jīng)過測試得出
Kestrel > 命令行 > 配置文件 > UseUrls > 環(huán)境變量 > 默認(rèn)值
如果你想自己試一試,代碼地址:
gitee:https://gitee.com/gyhgis/AspNetCoreUrl
github:https://github.com/gyhgis/AspNetCoreUrl
到此這篇關(guān)于ASP.NET Core設(shè)置URLs的五種方法的文章就介紹到這了,更多相關(guān)ASP.NET Core設(shè)置URLs 內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
判斷WebBrowser瀏覽器網(wǎng)頁加載完成的處理方法
.net 中通過 SqlConnection 連接 sql server,我們會發(fā)現(xiàn)第一次連接時總是很耗時,但后面連接就很快,這個其實(shí)和SqlConnection 的連接池機(jī)制有關(guān),正確的理解這個連接池機(jī)制,有助于我們編寫高效的數(shù)據(jù)庫應(yīng)用程序。2013-04-04
IIS處理Asp.net請求和Asp.net頁面生命周期詳細(xì)說明
ASP.NET 頁運(yùn)行時,此頁將經(jīng)歷一個生命周期,在生命周期中將執(zhí)行一系列處理步驟。這些步驟包括初始化、實(shí)例化控件、還原和維護(hù)狀態(tài)、運(yùn)行事件處理程序代碼以及進(jìn)行呈現(xiàn)2012-01-01
使用.net?core?自帶DI框架實(shí)現(xiàn)延遲加載功能
在某些情況,我們希望能延遲一個依賴的初始化。如果使用的是autofac,我們可以通過注入Lazy來實(shí)現(xiàn),這篇文章主要介紹了使用.net?core?自帶DI框架實(shí)現(xiàn)延遲加載,需要的朋友可以參考下2023-02-02
asp.net使用jQuery獲取RadioButtonList成員選中內(nèi)容和值示例
這篇文章主要介紹了通過jQuery來獲取RadioButtonList成員內(nèi)容的方法,大家參考使用吧2014-01-01
ASP.net 驗(yàn)證碼實(shí)現(xiàn)代碼(C#)
asp.net 驗(yàn)證碼效果實(shí)現(xiàn)代碼2008-02-02

