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

GitHub SDD Tools: spec-kit

GitHub SDD Tools: spec-kit

最近很夯 SDD,然後 GitHub 也出了工具 spec-kit 來幫助開發者撰寫 SDD 文件。 這個工具可以讓你直接用自然語言來描述你的需求,然後自動生成 SDD 文件。 spec-kit 支援來幾乎現在市面上所有的 AI Coding 工具,而且一直持續在更新。 以下是目前(0.0.79)版本可用的指令以及指令的用處: * 核心指令: 指令 用途 /speckit.constitution 建立或更新專案管理原則和開發指南 /speckit.specify 建立需求和使用者故事 /speckit.plan 建立實施計劃 /speckit.tasks 生成 Task /speckit.implement 執行 Task * 選擇性指令: 指令 用途 /speckit.clarify 釐清不明確的規格,

By Mars