預設情況下,ASP.NET Core應用程式監聽以下URL:
在這篇文章中,我展示了5種不同的方式來更改您的應用程式監聽的URL。
- 在Program.cs中使用
UseUrls()
- 環境變數 - 使用
DOTNET_URLS
或者ASPNETCORE_URLS
- 命令列引數 - 設定命令列引數
--urls
- launchSettings.json - 設定 applicationUrl 屬性
- KestrelServerOptions.Listen() - 使用
Listen()
手動使用配置Kestrel伺服器的地址
我將在下面更詳細地介紹每個選項。
UseUrls()
設定繫結URL的第一個也是最簡單的方法,在配置IWebHostBuilder
的時候使用UseUrls()
進行硬編碼。
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>();
webBuilder.UseUrls("http://localhost:5003", "https://localhost:5004");
});
}
環境變數
.NET Core使用兩種型別的配置:
- DOTNET_URLS
- ASPNETCORE_URLS
如果您同時設定了這兩個環境變數,那麼ASPNETCORE_URLS引數優先。
您可以用不同的方式設定環境變數。例如,使用命令列:
setx ASPNETCORE_URLS "http://localhost:5001"
使用powershell
$Env: ASPNETCORE_URLS = "http://localhost:5001"
使用bash:
export ASPNETCORE_URLS="http://localhost:5001;https://localhost:5002"
如上所示,您還可以通過使用分號分隔多個地址來傳遞多個地址以進行監聽(使用HTTP或HTTPS)。
命令列引數
設定主機配置值的另一種方法是使用命令列。如果設定了命令列引數,那麼會覆蓋環境變數的值, 只需使用--urls
引數:
dotnet run --urls "http://localhost:5100"
和上面一樣,您可以通過使用分號將多個URL分開來設定多個URL:
dotnet run --urls "http://localhost:5100;https://localhost:5101"
環境變數和命令列引數可能是在生產環境中為應用程式設定URL的最常見方法,但是它們對於本地開發來說有點麻煩。通常使用launchSettings.json會更容易。
launchSettings.json
大多數 .NET專案模板在Properties資料夾中都包含launchSettings.json檔案,這個檔案包含了啟動.NET Core應用程式的各種配置檔案。
{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:38327",
"sslPort": 44310
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
},
"TestApp": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
launchSettings.json還提供了environmentVariables引數,您可以用它來設定環境變數,就像上面這樣,然後我們可以選擇不同的啟動型別:
KestrelServerOptions.Listen
預設情況下,幾乎所有的.NET Core應用程式都配置了Kestrel,如果需要,您可以手動配置Kestrel的端點,也可以配置KestrelServerOptions。
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>();
webBuilder.UseKestrel(opts =>
{
// Bind directly to a socket handle or Unix socket
// opts.ListenHandle(123554);
// opts.ListenUnixSocket("/tmp/kestrel-test.sock");
opts.Listen(IPAddress.Loopback, port: 5002);
opts.ListenAnyIP(5003);
opts.ListenLocalhost(5004, opts => opts.UseHttps());
opts.ListenLocalhost(5005, opts => opts.UseHttps());
});
});
}
我個人沒有以這種方式在Kestrel中設定監聽端點,但是很高興知道可以根據需要完全控制Kestrel。
總結
在這篇文章中,我展示了五種不同的方式來設定應用程式監聽的URL。UseUrls()是最簡單的一種,但通常不適合在生產中使用, launchSettings.json檔案是在開發環境中設定的URL是非常有用的。 在生產中我們通常使用命令列引數--urls或者環境變數ASPNETCORE_URLS和DOTNET_URLS, 希望對您有幫助。
原文連結: https://andrewlock.net/5-ways-to-set-the-urls-for-an-aspnetcore-app/
最後
歡迎掃碼關注我們的公眾號 【全球技術精選】,專注國外優秀部落格的翻譯和開源專案分享,也可以新增QQ群 897216102