前言
上次,我們介紹了配置ASP.NET Core啟動地址的多種方法。
那么,如何通過代碼方式,獲取啟動后的地址?
WebApplication.Urls 對象
使用 WebApplication.Urls.Add 方法可以添加啟動地址。
那么,使用 WebApplication.Urls 應該可以獲取啟動地址。
那如何在啟動完成后能夠訪問 WebApplication.Urls 呢?
? 我們可以不用Run
方法啟動,而是等待Start
完成:
await?app.StartAsync();Console.WriteLine(app.Urls.First());await?app.WaitForShutdownAsync();
但是,這是 .NET 6 的實現方式, .NET 5 沒有這個對象。
IServerAddressesFeature
查看 WebApplication.Urls 的源碼,發現它實際調用的是IServerAddressesFeature
提供的屬性,而該實例可以通過IServer
獲取:
///?<summary>
///?The?list?of?URLs?that?the?HTTP?server?is?bound?to.
///?</summary>
public?ICollection<string>?Urls?=>?ServerFeatures.GetRequiredFeature<IServerAddressesFeature>().Addresses;internal?IFeatureCollection?ServerFeatures?=>?_host.Services.GetRequiredService<IServer>().Features;
更重要的是,該接口支持所有 ASP.NET Core 版本:
因此,最后的實現代碼如下:
public?static?async?Task?Main(string[]?args)
{var?host?=?CreateHostBuilder(args).Build();await?host.StartAsync();var?server?=?host.Services.GetService(typeof(IServer))?as?IServer;?????Console.WriteLine(server.Features.Get<IServerAddressesFeature>().Addresses.First());await?host.WaitForShutdownAsync();
}
結論
獲取 ASP.NET Core 啟動地址在某些場景下非常有用,比如服務注冊。
想了解更多內容,請關注我的個人公眾號”My IO“