Setting URL, Port in ASP.NET Core application
這篇文章主要是因為在寫 ASP.NET Core 時,需要可以透過 CLI 來設定監聽的 URL,
其實本來 dotnet run
就可以設定了,但因為要配合其他功能,所以需要自己寫 CLI 整合;
因此研究了一下可以怎麼設定監聽的 URL。
在 .NET 8 ASP.NET Core 預設監聽的 URL 是 http://localhost:5000
,
以下介紹幾種比較常見也常用方法來設定監聽的 URL。
最主要的方法有以下兩種:
- 設定 Endpoint
WebApplicationBuilder.UseUrls()
WebApplication.Urls.Add()
- 環境變數
ASPNETCORE_URLS
- 命令參數
--urls
- 設定 PORT
UseUrls()
在 CreateHostBuilder
方法中使用 UseUrls()
方法來設定監聽的 URL。
var builder = WebApplication.CreateBuilder(args);
// Set the URLs to listen on
builder.WebHost.UseUrls("http://localhost:5123", "https://localhost:5223");
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
Urls.Add
設定
建立後的 WebApplication
可以使用 Urls
來設定監聽的 URL。
var builder = WebApplication.CreateBuilder(args);
// Set the URLs to listen on
builder.WebHost.UseUrls("http://localhost:5123", "https://localhost:5223");
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Urls.Clear();
app.Urls.Add("http://localhost:5323");
app.Run();
環境變數
環境變數有兩種類型可以設定,一個是設定 URL
一個是設定 PORT
。
環境變數可以透過 terminal
來設定。
- Bash
export {EnvName}=value
- PowerShell
$Env:{EnvName} = "value"
從 環境變數
設定監聽的 URL
DOTNET_URLS
ASPNETCORE_URLS
從 環境變數
設定監聽的 PORT
HTTP_PORTS
HTTPS_PORTS
DOTNET_HTTP_PORTS
DOTNET_HTTPS_PORTS
ASPNETCORE_HTTP_PORTS
ASPNETCORE_HTTPS_PORTS
Note: 不過如果 appsettings.json
有設定 http_ports
或 https_ports
的話,需要使用 HTTP_PORTS
跟 HTTPS_PORTS
來設定。
Command Line
dotnet run -- --urls "http://localhost:5123;https://localhost:5223"
appsettings.json
urls
{
"urls": "http://localhost:5123;https://localhost:5223"
}
ports
{
"http_ports": "5123",
"https_ports": "5223"
}
launchSettings.json
此方法只有在開發時期使用 dotnet run
有作用。
{
"profiles": {
"HttpOnly": {
"commandName": "Project",
"dotnetRunMessages": "true",
"applicationUrl": "http://localhost:5123",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"Https": {
"commandName": "Project",
"dotnetRunMessages": "true",
"applicationUrl": "http://localhost:5123;https://localhost:5223",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
使用 dotnet run
時,也可以避免讀取 launchSettings.json
,來使用一般的 URL 設定。
dotnet run --no-launch-profile
設定的優先順序
設定方法有很多種方式,那有一個重要的問題就是優先順序了,以下是官方文件中列出的優先順序
- appsettings.json
- appsettings.{Environment}.json
- User secrets // 這方法只在 Development 作用
- 環境變數
- 命令列參數
結論
以上並非全部的設定方法,只是個人比較常用的幾種方法,其他方法可以參閱官方文件。