文章目錄
關於 ASP.NET Core ListenAnyIP
之前筆記 ASP.NET Core URLs 設定的套用順序 紀錄到 ASP.NET Core URL 幾種設定方式的套用順序,其中 WebHostBuilder 的 UseKestrel
方法,筆記使用的是 opts.ListenLocalhost(10000, opts =>opts.Protocols= HttpProtocols.Http1);
與 opts.ListenLocalhost(10001, opts => opts.UseHttps());
,相信一定也看過 opts.ListenAnyIP(12345);
這樣指定任意 ip 的寫法,今天就來紀錄一下該如何使用
基本環境說明
- macOS Big Sur 11.5.1
- .NET Core SDK 5.0.202
ASP.NET Core Web Api 預設專案範本
這邊會延續之前筆記 ASP.NET Core URLs 設定的套用順序 的內容
Program.cs 程式碼
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>().UseKestrel(opts => { opts.ListenAnyIP(12345); }); }); }
發現與使用方式
使用
opts.ListenAnyIP(12345);
會 listenhttp://[::]:12345
關於
ListenAnyIP
完整內容可以參考官方文件 Microsoft Docs:KestrelServerOptions.ListenAnyIP Method,但請務必看英文版,中文意思完全不對了
- 中文版
- 英文版
預設使用 IPv6 的
[::]
監聽所有 IP,如果 IPv6 無法使用的話就使用 IPv4 的0.0.0.0
監聽所有 IP使用 IPv4 無法開啟
同事反應他使用
localhost
、127.0.0.1
、內網 ip
皆無法正確開啟網頁,但我自己是都可以正常開啟使用 IPv6 開啟
這個比較偏向對於 IPv6 格式的理解,IPv6 的 localhost 為
[::1]
,想要透過 IPv6 開啟 12345 port 中的 swagger 就是透過http://[::1]:12345/swagger/index.html
心得
我沒找出為什麼在使用 ListenAnyIP 的預設監聽 IPv6 所有 ip 的設定下,我可以直接使用 IPv4 的 ip 直接存取,也沒找出為什麼同事無法開啟,最大的收獲可能是搞清楚了 IPv6 的 localhost 是 [::1]
哈哈
參考資訊
文章作者 Yowko Tsai
上次更新 2021-08-18
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。