ASP.NET Core 應用程式預設是使用以下兩個位址做為起始連結
- **http://localhost:5000**
- **https://localhost:5001**
以下將介紹幾種修改起始連結的方式
##1. 使用 UseUrls()
直接將連結寫死在程式碼裡,通常實際的專案不會這樣寫(你硬要也不是不行),方式為在 Program.cs 裡的`CreateHostBuilder`方法內加上一行程式碼如下
``` C#
public class Program
{
public static void Main(string[] args)
{
CreateHostBuilder(args).Build().Run();
}
public static IHostBuilder CreateHostBuilder(string[] args)
=> Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
webBuilder.UseUrls("http://localhost:5003", "https://localhost:5004"); // 加上此行程式碼
});
}
```
##2. 使用環境變數 採用添加系統環境變數的方式來指定起始連結,如下 使用命令提示字元(Command Prompt): ``` Bash setx ASPNETCORE_URLS "http://localhost:5003;https://localhost:5004" ``` 使用 Powershell: ``` Bash $Env: ASPNETCORE_URLS = "http://localhost:5003;https://localhost:5004" ``` 使用 Bash: ``` Bash export ASPNETCORE_URLS="http://localhost:5003;https://localhost:5004" ``` 若是在 Visual Studio Code 開發環境下,也可對專案 .vscode 目錄下的 launch.json 新增一行執行時帶上的環境變數,請看以下範例 ``` Json { "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", /*** 省略部分代碼 ***/ "env": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_URLS": "http://localhost:5003;https://localhost:5004" //加入這行設定 }, /*** 省略部分代碼 ***/ }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ``` 如果 Server 是選用IIS,則也可以透過在 web.config 裡加上環境變數`ASPNETCORE_URLS`來指定起始連結,例如 ``` Xml <?xml version="1.0" encoding="utf-8"?>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModuleV2" resourceType="Unspecified" />
<environmentVariable name="ASPNETCORE_ENVIRONMENT" value="Development" />
<environmentVariable name="ASPNETCORE_URLS" value="http://localhost:5003;https://localhost:5004" /> //加入這行
<environmentVariable name="ASPNETCORE_HTTPS_PORT" value="443" />
<environmentVariable name="COMPLUS_ForceENC" value="1" />
```
##3. 使用指令方式啟動程式並加上 --urls 參數 ``` Bash dotnet run --urls "http://localhost:5003;https://localhost:5004" ``` 此種方式會蓋掉使用環境變數(方法2)的設定
##4. 使用 launchSettings.json(只適用開發環境) 在新建一個 ASP.NET Core 專案時,預設都會在主專案下建立一個 Properties 的目錄,裡面可以找到 launchSettings.json 這支檔案,該檔案內容會有個用我們 APP 名稱的區段,裡面有個屬性 `applicationUrl`,修改成我們想要指定的連結位址即可 ``` Json { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:48135", "sslPort": 44311 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "MyTestApp": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5004;http://localhost:5003", //修改成自己想要的位址 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ``` `dotnet run` 預設會先自動採用此設定檔的值,優先權高於使用環境變數(方法2)的設定
##5. 寫在 appsettings.{ENVIRONMENT}.json 寫在 appsettings.{ENVIRONMENT}.json 設定檔裡算是我比較常用的方式,設定方式如下(請看 Kestrel 區段) ``` Json { "Logging": { "LogLevel": { "Default": "Warning", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "Kestrel": { "EndPoints": { "Http": { "Url": "http://localhost:5003" /* HTTP */ }, "Https": { "Url": "https://localhost:5004" /* HTTPS */ } } }, "ConnectionStrings": { "MyDbContext": "" }, /*** 省略其它代碼 ***/ } ``` 使用此種方式會覆蓋掉所有以上提到的設定方式(1~4),然後會在 Console 視窗看到類似下面的警告(我是直接忽略) ![Image](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQJtDQrBW05H40RaP56If6M3LKDuJ79-FlHfGInV4Wvn9sTGiR76gT48DwJQgRv8IwRT4yeC4JAjDMHXdz0ojep3lb2ccpkJ19fmNn4pv1UisSI3KjKci7498MeK5RBX2-R1FvaWOaaGx5/s1600/urls.jpg)
##總結 (Summary) **開發環境:**建議可採用方法 1 或 4 **正式(生產)環境:**我會在方法 2 或 5 之間選擇一種
##參考資料 [\[MSDN\] Kestrel web server implementation in ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#endpoint-configuration) [\[Andrew Lock\] 5 ways to set the URLs for an ASP.NET Core app](https://andrewlock.net/5-ways-to-set-the-urls-for-an-aspnetcore-app/)
##2. 使用環境變數 採用添加系統環境變數的方式來指定起始連結,如下 使用命令提示字元(Command Prompt): ``` Bash setx ASPNETCORE_URLS "http://localhost:5003;https://localhost:5004" ``` 使用 Powershell: ``` Bash $Env: ASPNETCORE_URLS = "http://localhost:5003;https://localhost:5004" ``` 使用 Bash: ``` Bash export ASPNETCORE_URLS="http://localhost:5003;https://localhost:5004" ``` 若是在 Visual Studio Code 開發環境下,也可對專案 .vscode 目錄下的 launch.json 新增一行執行時帶上的環境變數,請看以下範例 ``` Json { "version": "0.2.0", "configurations": [ { "name": ".NET Core Launch (web)", "type": "coreclr", "request": "launch", "preLaunchTask": "build", /*** 省略部分代碼 ***/ "env": { "ASPNETCORE_ENVIRONMENT": "Development", "ASPNETCORE_URLS": "http://localhost:5003;https://localhost:5004" //加入這行設定 }, /*** 省略部分代碼 ***/ }, { "name": ".NET Core Attach", "type": "coreclr", "request": "attach", "processId": "${command:pickProcess}" } ,] } ``` 如果 Server 是選用IIS,則也可以透過在 web.config 裡加上環境變數`ASPNETCORE_URLS`來指定起始連結,例如 ``` Xml <?xml version="1.0" encoding="utf-8"?>
##3. 使用指令方式啟動程式並加上 --urls 參數 ``` Bash dotnet run --urls "http://localhost:5003;https://localhost:5004" ``` 此種方式會蓋掉使用環境變數(方法2)的設定
##4. 使用 launchSettings.json(只適用開發環境) 在新建一個 ASP.NET Core 專案時,預設都會在主專案下建立一個 Properties 的目錄,裡面可以找到 launchSettings.json 這支檔案,該檔案內容會有個用我們 APP 名稱的區段,裡面有個屬性 `applicationUrl`,修改成我們想要指定的連結位址即可 ``` Json { "iisSettings": { "windowsAuthentication": false, "anonymousAuthentication": true, "iisExpress": { "applicationUrl": "http://localhost:48135", "sslPort": 44311 } }, "profiles": { "IIS Express": { "commandName": "IISExpress", "launchBrowser": true, "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } }, "MyTestApp": { "commandName": "Project", "launchBrowser": true, "applicationUrl": "https://localhost:5004;http://localhost:5003", //修改成自己想要的位址 "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" } } } } ``` `dotnet run` 預設會先自動採用此設定檔的值,優先權高於使用環境變數(方法2)的設定
##5. 寫在 appsettings.{ENVIRONMENT}.json 寫在 appsettings.{ENVIRONMENT}.json 設定檔裡算是我比較常用的方式,設定方式如下(請看 Kestrel 區段) ``` Json { "Logging": { "LogLevel": { "Default": "Warning", "Microsoft": "Warning", "Microsoft.Hosting.Lifetime": "Information" } }, "Kestrel": { "EndPoints": { "Http": { "Url": "http://localhost:5003" /* HTTP */ }, "Https": { "Url": "https://localhost:5004" /* HTTPS */ } } }, "ConnectionStrings": { "MyDbContext": "" }, /*** 省略其它代碼 ***/ } ``` 使用此種方式會覆蓋掉所有以上提到的設定方式(1~4),然後會在 Console 視窗看到類似下面的警告(我是直接忽略) ![Image](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiQJtDQrBW05H40RaP56If6M3LKDuJ79-FlHfGInV4Wvn9sTGiR76gT48DwJQgRv8IwRT4yeC4JAjDMHXdz0ojep3lb2ccpkJ19fmNn4pv1UisSI3KjKci7498MeK5RBX2-R1FvaWOaaGx5/s1600/urls.jpg)
##總結 (Summary) **開發環境:**建議可採用方法 1 或 4 **正式(生產)環境:**我會在方法 2 或 5 之間選擇一種
##參考資料 [\[MSDN\] Kestrel web server implementation in ASP.NET Core](https://docs.microsoft.com/en-us/aspnet/core/fundamentals/servers/kestrel?view=aspnetcore-3.1#endpoint-configuration) [\[Andrew Lock\] 5 ways to set the URLs for an ASP.NET Core app](https://andrewlock.net/5-ways-to-set-the-urls-for-an-aspnetcore-app/)