5種設定ASP.NET Core應用程式URL的方法

SpringLeee發表於2021-02-14

預設情況下,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

5種設定ASP.NET Core應用程式URL的方法

相關文章