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_portshttps_ports 的話,需要使用 HTTP_PORTSHTTPS_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

設定的優先順序

設定方法有很多種方式,那有一個重要的問題就是優先順序了,以下是官方文件中列出的優先順序

  1. appsettings.json
  2. appsettings.{Environment}.json
  3. User secrets // 這方法只在 Development 作用
  4. 環境變數
  5. 命令列參數

結論

以上並非全部的設定方法,只是個人比較常用的幾種方法,其他方法可以參閱官方文件。

Reference

Read more

Debug Story

Debug Story

Ref: * 寫程式不是輸出,是內化 * Vibe Story:用敘事智能為程式碼注入生命,簡化維護 這篇主要是想紀錄一下看了Ruddy 老師的文章後想做的事情,雖然通篇的重點不是在我想做的這件事,但因為Ruddy 老師的這篇文章讓我覺得以後在排除 Bug 的時候應該要做這件事才對。 以下的內容是擷取 Ruddy 老師的內容(部分修改) 1. 記錄搜尋路徑與嘗試過的假設 => 我以為是 state 沒清,但發現是 effect 未執行 2. 為錯誤進行分類,然後標註成概念 => 這是 mutable state 的副作用問題 3. 寫一段描述該段程式的情境與原則 => Vibe Story 該段程式的情境與原則可以參考一下的要點撰寫: * 場景(Context):描述程式碼的背景與需求。 * 目標(Goal):說明功能目的。 * 挑戰與迭代(Challenges &

By Mars
Claude Code Status line on Windows

Claude Code Status line on Windows

Claude Code 在大家軍備戰發布了 Status line 這個功能,讓使用者可以在 Claude Code 的輸入框下方自訂自己想要的訊息,官方提供幾個方式可以實現這功能(Bash, Node.js, Python),最後我選擇使用 Node.js。 趁著週末寫玩了一下,剛開始照著官方文件做,結果啥都沒顯示出來,接著叫 Claude Code 幫我做,他說成功了,結果還是啥都沒有...最後才發現可能是官方提供設定檔案的問題 { "statusLine": { "type": "command", "command": "~/.claude/statusline.sh", "padding": 0 // Optional:

By Mars