オリジナル:のURLを設定するには5つの方法 ASP.NETコアアプリの
著者:アンドリュー・ロックの
翻訳:Lamond呂
既定では、ASP.NET Coreアプリケーションは2つのURLをリッスンします。
このブログ投稿では、アプリケーションが5つの異なる方法でリッスンするURLを変更する方法を示します。
ASP.NET Coreプロジェクトの開始時に、監視URLを構成する方法は複数あります。以前のブログでは、ASP.NET Core 1.0でさまざまな構成方法を適用する方法を示しました。ASP.NETCore 3の場合.xでは、ほとんどのメソッドは同じです。
UseUrls()
-Program.csでプログラムによって監視されるURLを構成する- 環境変数-URLの使用
DOTNET_URLS
またはASPNETCORE_URLS
構成 - コマンドラインパラメータ-コマンドラインを使用してアプリケーションを起動するときは、
--urls
パラメータを使用してURLを指定します - 使用
launchSettings.json
-使用applicationUrl
のconfigure URLへのプロパティ KestrelServerOptions.Listen()
-使用Listen()
を手動で構成する方法Kestral
サーバーリッスンアドレス
それぞれの方法について詳しく説明します。
どのURLを使用できますか?##
この記事では、バインドできる「URL」について説明しますが、すべてのURLを使用できるわけではありません。バインドできるURLは3種類あります
- IPV4およびIPV6のホスト名(例:)
http://localhost:5000
このURLのフォーマットは{scheme}://{loopbackAddress}:{port}
- マシンで使用可能な指定されたIPアドレス(例
http://192.168.8.31:5005
:)、このURLのフォーマットは{scheme}://{IPAddress}:{port}
- 特定のポートについては、「任意の」IPアドレス(たとえば
http://*:6264
)を使用します。このURLの形式は次のとおりです。{scheme}://*:{port}
上記のいくつかの形式では、ポート番号も省略可能ですが、省略した場合、システムはデフォルトのポートを使用します(httpはポート80を使用し、httpsはポート443を使用します)。
使用するURLの形式は、展開方法によって異なります。たとえば、同じ「ベアメタル」で複数のアプリケーションをホストしている場合、指定したIPアドレスを表示する必要がある場合があります。ただし、コンテナホスティングを使用しlocalhost
ている場合は、それをアドレスとして使用できます。
IPアドレスの「ノー」形式のためにという注意-あなたが使用する必要はありません
*
、あなたはIPアドレスまたはない限り、任意の文字を使用することができlocalhost
、使用できる手段は、http://*
、http://+
、http://mydomain
、http://example.org
これらの文字列のすべてが同じ動作をすることができています。任意のIPアドレスをリッスンします。単一のホスト名からの要求のみを処理する場合は、ホストフィルタリングをさらに構成する必要があります。
聞く必要のあるURLのタイプがわかったので、アプリケーションにそれらの使用方法を伝える必要があります。ここでは、それを使用する5つの可能な方法を示します。
UseUrls
()#
まず、最も簡単な方法は、を構成するときにIWebHostBuilder
、UseUrls()
メソッドを使用してバインドされたURL をハードコーディングすることです。
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");
});
}
URLをハードコーディングすることは、クリーンでスケーラブルなソリューションではないため、通常、この方法はデモでのみ使用されます。
さいわい、外部構成ファイル、環境変数、コマンドラインパラメータからURL構成を読み込むこともできます。
環境変数#
.NET Coreでは2つの構成方法が許可されています
- アプリケーションレベルの構成は、アプリケーションで通常使用する構成であり、
appSettings.json
構成ファイルと環境変数と共に読み込まれます。 - ホスト構成は、ホスト環境やホストURLなど、アプリケーションの基本構成を構成するために使用されます
アプリケーションのURLを構成する方法を検討しているとき、ホストの構成に関心があります。デフォルトのホスト構成値は、3つの異なる場所から取得されます。
DOTNET_
環境変数始まります。- コマンドラインパラメーター
ASPNETCORE_
環境変数始まります。この方法はASP.NET Coreアプリケーションに限定されており、汎用ホストに基づくワーカーサービスは適用されません。
UseUrls()
メソッドを手動で上書きしていない場合、ASP.NET Coreはシステム構成の中央のURLS
キーの値を使用します。説明に基づいて、次の2つの方法でURLを構成できます。
DOTNET_URLS
ASPNETCORE_URLS
2つの環境変数を同時に使用する場合、システムは
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"
上記の例から、複数のアドレスを構成する場合は、セミコロンの間隔のみを使用する必要があることを見つけるのは難しくありません。
コマンドラインパラメーター#
ホスト構成を設定する別の方法は、コマンドラインパラメータを使用することです。環境変数とコマンドラインパラメータが同時に構成されている場合、コマンドラインパラメータの値は環境変数構成の値を上書きします。ここでは、--urls
パラメーターを使用してURLを構成できます。
dotnet run --urls "http://localhost:5100"
前の例のように、ここではセミコロン間隔で複数のURLを構成できます
dotnet run --urls "http://localhost:5100;https://localhost:5101"
実稼働環境では、URLSを構成する最も一般的な方法は、環境変数またはコマンドラインパラメーターを使用することですが、ローカル開発環境では少し面倒な場合があります。現時点でlaunchSetting.json
は、URLSを構成する方が簡単な場合があります。
launchSettings.json
#
ほとんどの.NET Coreプロジェクトテンプレートにはという名前のlaunchSetting.json
ファイルが含まれており、このファイルは通常Properties
フォルダーに配置されます。このファイルには、ASP.NET Coreプロジェクトを開始するためのさまざまな構成が含まれています。一般的なlaunchSetting.json
ファイルには2つの部分の定義が含まれています。1つはコマンドラインからプロジェクトを開始するときの構成、もう1つはIIS Expressを使用してプロジェクトを開始するときの構成です。使用される部分は、Visual Studioの[デバッグ]ドロップダウンリストによって制御されます。
ではlaunchSettings.json
、ドキュメント、我々が使用するapplicationUrl
プロパティをバインディングアプリケーションのURLを設定することができます-次の例では、見ることができるiisSettings
で構成ノードが存在するTestApp
ノード構成が。
{
"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"
}
}
}
}
このファイルの使用を指定する必要はありませんdotnet run
。コマンドによって自動的にロードされます。
launchSettings.json
このファイルには、追加の環境変数構成パラメーターenvironmentVariables
も含まれています。上記の例で確認できます。
コマンドラインからdotnet run
コマンドを使用してアプリケーションを起動すると、アプリケーションは「プロジェクト」コマンドのapplicationUrl
パラメーターから構成をロードしますhttps://localhost:5001;http://localhost:5000
。IISExpress
コマンドを使用してプロジェクトを開始すると、アプリケーションはiisSettings.iisExpress
ノードのapplicationUrl
パラメーターから構成をロードしますhttp://localhost:38327
ローカル開発を行う場合、このファイルは環境を構成する最も簡単な方法です。実際、launchSettings.json
ファイルを使用したくない場合は、具体的に構成する必要があります。
dotnet run --no-launch-profile
上記のコマンドはlaunchSettings.json
、ファイルのロードをスキップし、ホスト環境変数の構成を使用して、バインドされるURLを決定します。
これまでのところ、すべての実装はKestrel
サーバーに対して間接的に構成されたURL を持っていますが、実際には直接構成することもできます。
KestrelServerOptions.Listen()
#
ほとんどすべてのASP.NET CoreアプリケーションはKestrel
、デフォルトでサーバーを使用します。必要に応じて、Kestrel
サーバーノードを手動で構成するか、IConfiguration
構成を使用できますKestrelServerOptions
。
これまでに行ったことはなく、多くの構成項目があるため、ほとんどの場合、ドキュメントを参照することをお勧めします。たとえば、Listen()
関数を使用して明示的に構成することができます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
は、サーバーに複数のリスニングアドレスを設定します。上記の例ではハードコーディングが使用されましたが、実際にはIConfiguration
バインディングを代わりに使用できます。上記の方法をKestrel
使用してサーバーのURL を構成する場合、他の方法を使用してURLを構成すると、他の構成方法がオーバーライドされます。この場合、プログラムログに次の警告が表示されます。
warn: Microsoft.AspNetCore.Server.Kestrel[0]
Overriding address(es) 'http://localhost:5007'. Binding to endpoints defined in UseKestrel() instead.
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://127.0.0.1:5002
info: Microsoft.Hosting.Lifetime[0]
Now listening on: http://[::]:5003
私個人的には、この方法をKestrel
使用してサーバーのURL を構成するシナリオに遭遇したことはありませんが、必要なときにKestrel
サーバー構成を完全に制御できます。
まとめ#
このブログ記事では、アプリケーションの監視URLを設定する方法が5つあることを示しました。これUseUrls()
は最も簡単な方法ですが、基本的に運用環境での使用には適していません。コマンドラインパラメータ--urls
とASPNETCORE_
/ DOTNET
環境変数を渡すことは、本番環境の一般的な方法です。開発環境では、launchSetting.json
ファイルは最も有用な構成方法です。きめ細かい構成が必要な場合は、Kestrel
サーバーに付属の構成オプションを直接使用できます。