ASP.NET CoreでリッスンURLを構成する5つの方法

オリジナル: ASP.NET CoreでリッスンURLを構成する5つの方法

オリジナル:の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://mydomainhttp://example.orgこれらの文字列のすべてが同じ動作をすることができています。任意のIPアドレスをリッスンします。単一のホスト名からの要求のみを処理する場合は、ホストフィルタリングをさらに構成する必要があります。

聞く必要のあるURLのタイプがわかったので、アプリケーションにそれらの使用方法を伝える必要があります。ここでは、それを使用する5つの可能な方法を示します。

UseUrls()

まず、最も簡単な方法は、を構成するときにIWebHostBuilderUseUrls()メソッドを使用してバインドされた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.jsonURLSを構成する方が簡単な場合があります。

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:5000IISExpressコマンドを使用してプロジェクト開始すると、アプリケーションは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()は最も簡単な方法ですが、基本的に運用環境での使用には適していません。コマンドラインパラメータ--urlsASPNETCORE_/ DOTNET環境変数を渡すことは、本番環境の一般的な方法です。開発環境では、launchSetting.jsonファイルは最も有用な構成方法です。きめ細かい構成が必要な場合は、Kestrelサーバーに付属の構成オプションを直接使用できます。

おすすめ

転載: www.cnblogs.com/lonelyxmas/p/12735387.html