演習 - Web アプリをローカルで実行する

完了

この演習では、次のことを行います。

  • Web アプリをローカルで実行し、ブラウザーでそれを表示します。
  • Web アプリの提供方法を確認します。

Web アプリを実行してブラウザーで表示する

以下のようにして、Visual Studio Code で Web アプリを実行し、ブラウザーで表示します。

  1. Visual Studio Code で、F5 キーを押してアプリを実行します。

    Visual Studio Code:

    • アプリケーションをビルドして実行する .NET CLI コマンドの dotnet run をトリガーします。
    • 実行中のアプリケーションにデバッガーをアタッチします。

    Visual Studio Code でプロジェクトを初めて実行すると、[デバッガーの選択] プロンプトが表示されます。

  2. Visual Studio Code UI の上部にあるコマンド パレット内の [デバッガーの選択] プロンプトで、[C#] を選択します。 次のプロンプトで、既定の起動構成 (C#: MyWebApp [Default Configuration]) を選択します。

    コマンド パレットで [デバッガーの選択] を選択したスクリーンショット。

    既定のブラウザーが http://localhost:{PORT} で起動され、アプリの応答が表示されます。 プレースホルダー {PORT} は、アプリのプロジェクトの作成時に割り当てられたランダムなポートです。 ローカル ポートとの競合が原因でポートを変更する必要がある場合は、プロジェクトの Properties/launchSettings.json ファイル内でポートを変更します。

    ブラウザーに表示される応答:

    テキスト出力が表示されたブラウザーのスクリーンショット。

  3. ブラウザー ウィンドウを閉じます。

  4. Visual Studio で、以下のいずれかを実行します。

    • [実行] メニューから [デバッグの停止] を選択します。
    • キーボードの Shift+F5 キーを押します。

以下のように .NET CLI を使用して Web アプリを実行します。

  1. ターミナルまたはコマンド ラインから、MyWebApp.csproj ファイルを含む MyWebApp プロジェクト ディレクトリに移動します。

  2. 次のコマンドを使用してアプリをビルドして実行します。

    dotnet run
    

    プロジェクトがビルドおよび実行され、コマンド ラインに次の出力が表示されます。

    C:\MyWebApp> dotnet run
    Building...
    info: Microsoft.Hosting.Lifetime[14]
            Now listening on: http://localhost:5267
    info: Microsoft.Hosting.Lifetime[0]
            Application started. Press Ctrl+C to shut down.
    

    指定された URL のポート番号はプロジェクトの作成時に構成でランダムに設定されるため、エンドポイントのポート番号が異なる場合があります。

  3. 自身のコマンド ライン出力で生成された URL でブラウザーを開くと、以下のようにアプリの応答 Hello World! が表示されます。

    テキスト出力が表示されたブラウザーのスクリーンショット。

  4. アプリをシャットダウンするには、コマンド ラインで Ctrl キーを押しながら C キーを押します。

Web アプリの提供方法

アプリのビルドと実行の際には、以下の処理が行われます。

ビルドと構成:

  • 依存関係を復元し、プロジェクトをコンパイルするために MSBuild が呼び出されます。 MSBuild は、MyWebApp.csproj プロジェクト ファイルを処理し、ソース コードをアセンブリにコンパイルします。
  • アプリは、既定の起動プロファイル (最初に一覧表示されたもの) のlaunchSettings.json で指定された設定を含む構成設定を読み取ります。

ホストのセットアップ:

  • WebApplication.CreateBuilder 内の メソッドが Web ホストを設定します。 既定では、このメソッドは Kestrel を Web サーバーとして構成します。 Kestrel は、高パフォーマンス用に設計された ASP.NET Core 用のクロスプラットフォーム Web サーバーです。
  • Kestrel は、構成された URL での受信 HTTP (指定がある場合は HTTPS を含む) 要求のリッスンを開始します。

要求の処理:

  • 要求を受信すると、Kestrel はそれを ASP.NET Core ミドルウェア パイプラインに転送します。
  • ミドルウェア パイプラインは、認証、ログ、ルーティングなどのタスクを処理できる一連のミドルウェア コンポーネントを介して要求を処理します。
  • 要求が定義済みのルートにマッチする場合は、対応するエンドポイントが実行されます。 このケースでは、app.MapGet("/", () => "Hello World!") エンドポイントがルート URL への要求を処理し、文字列 Hello World! を返します。

応答:

  • 応答 (このケースでは文字列 "Hello World!") がミドルウェア パイプラインを介して Kestrel に送り返された後、クライアントに送り返されます。