アプリの起動

ヒント

このコンテンツは電子ブック、Azure の「ASP.NET Web Forms 開発者向け Blazor」からの抜粋です。これは .NET Docs から閲覧するか、オフラインで読める無料ダウンロードの PDF としても入手できます。

Blazor-for-ASP-NET-Web-Forms-Developers eBook cover thumbnail.

ASP.NET 用に記述されたアプリケーションには通常、HTML レンダリングと .NET 処理の両方で、どのサービスを構成して使用できるようにするかを制御する Application_Start イベントを定義する global.asax.cs ファイルがあります。 この章では、ASP.NET Core と Blazor Server との若干の違いについて説明します。

Application_Start と Web Forms

既定の Web フォームである Application_Start メソッドは、多くの構成タスクに対応するために、長年にわたって拡張されています。 Visual Studio 2022 の既定のテンプレートを使用した新しい Web フォーム プロジェクトには、次の構成ロジックが含まれるようになりました。

  • RouteConfig - アプリケーションの URL ルーティング
  • BundleConfig - CSS と JavaScript のバンドルと縮小

これらの各ファイルは App_Start フォルダーに格納され、アプリケーションの開始時に 1 回だけ実行されます。 既定のプロジェクト テンプレートの RouteConfig では、アプリケーションの URL がファイル拡張子 .ASPX を省略できるように、Web フォーム用の FriendlyUrlSettings が追加されます。 既定のテンプレートには、拡張子を省略したファイル名を持つフレンドリ URL に対して .ASPX ページの永続的な HTTP リダイレクト ステータス コード (HTTP 301) を提供するディレクティブも含まれています。

ASP.NET Core および Blazor では、これらのメソッドは単純化されて Startup クラスに統合されるか、一般的な Web テクノロジを優先して除去されます。

Blazor Server の Startup の構造

Blazor Server アプリケーションは、ASP.NET Core 3.0 以降のバージョン上に存在します。 ASP.NET Core Web アプリケーションは、Program.cs 内、または Startup.cs クラス内のメソッドのペアを使用して構成されます。 サンプル Program.cs ファイルを次に示します。

using BlazorApp1.Data;
using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Web;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddRazorPages();
builder.Services.AddServerSideBlazor();
builder.Services.AddSingleton<WeatherForecastService>();

var app = builder.Build();

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
    app.UseExceptionHandler("/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.MapBlazorHub();
app.MapFallbackToPage("/_Host");

app.Run();

アプリに必要なサービスは、WebApplicationBuilder インスタンスの Services コレクションに追加されます。 これは、さまざまな ASP.NET Core フレームワーク サービスをフレームワークの組み込み依存関係挿入コンテナー用に構成する方法です。 さまざまな builder.Services.Add* メソッドにより、認証、Razor Pages ルーティング、MVC コントローラー ルーティング、SignalR、Blazor Server の対話など、多くの機能を有効にするサービスが追加されます。 このメソッドは Web フォームでは必要ありませんでした。これは、ASPX、ASCX、ASHX、ASMX の各ファイルの解析と処理は、web.config 構成ファイルの ASP.NET を参照することによって定義されていたためです。 ASP.NET Core での依存関係の挿入の詳細については、 オンライン ドキュメントを参照してください。

builder によって app がビルドされた後は、app の残りの呼び出しによって、その HTTP パイプラインが構成されます。 これらの呼び出しを使用して、アプリケーションに送信されたすべての要求を処理するミドルウェアを完全に宣言します。 既定の構成では、これらの機能のほとんどが Web フォーム構成ファイルに分散されており、今では参照しやすいように 1 か所にまとめられています。

カスタム エラー ページの構成は web.config ファイルに配置されなくなりましたが、アプリケーション環境に Development ラベルが付いていない場合に常に表示されるように構成されています。 さらに ASP.NET Core アプリケーションは、既定で UseHttpsRedirection メソッド呼び出しによって、TLS によるセキュリティで保護されたページを提供するように構成されています。

次に、予期しない構成メソッドが UseStaticFiles に対して呼び出されます。 ASP.NET Core では、静的ファイル (JavaScript、CSS、イメージ ファイルなど) に対する要求のサポートを明示的に有効にする必要があり、アプリの wwwroot フォルダー内のファイルのみが既定でパブリック アドレスを指定できます。

次の行は、Web フォームからの構成オプションの 1 つをレプリケートする最初の行 UseRouting です。 このメソッドによって、パイプラインに ASP.NET Core ルーターが追加されます。これは、ここで構成することも、ルーティング先として検討できる個々のファイルで構成することもできます。 ルーティング構成の詳細については、ルーティングのセクションを参照してください。

このセクションの最後の app.Map* 呼び出しによって、ASP.NET Core がリッスンするエンドポイントが定義されます。 これらのルートは Web アクセス可能な場所であり、ユーザーは Web サーバー上でアクセスし、.NET によって処理されてユーザーに返される一部のコンテンツを受信します。 最初のエントリ MapBlazorHub は、Blazor コンポーネントの状態とレンダリングが処理されるサーバーへのリアルタイムおよび永続的な接続を提供するために使用する SignalR ハブを構成します。 MapFallbackToPage メソッド呼び出しは、Blazor アプリケーションを開始し、クライアント側からのディープリンク設定要求を処理するようにアプリケーションを構成する、ページの Web アクセス可能な場所を示します。 この機能の動作は、ブラウザーを開き、既定のプロジェクト テンプレート内の /counter などのアプリケーション内の Blazor で処理されたルートに直接移動した場合に確認できます。 要求は _Host.cshtml フォールバック ページによって処理され、その後 Blazor ルーターが実行されてカウンター ページがレンダリングされます。

実行中の IIS への依存が理由で、Web フォームでは必要とされていなかったアプリケーションが、最後の行によって起動されます。

BundleConfig プロセスのアップグレード

CSS スタイルシートや JavaScript ファイルなどのアセットをバンドルするテクノロジは大幅に変化しており、これらのリソースを管理するためのツールや手法も他のテクノロジによって急速に進化しています。 このため、Grunt/Gulp/WebPack などの Node コマンドライン ツールを使用して、静的なアセットをパッケージ化することをお勧めします。

Grunt、Gulp、および WebPack のコマンドライン ツールとそれらに関連する構成をアプリケーションに追加でき、ASP.NET Core は、アプリケーションのビルド プロセス中にこれらのファイルを自動的に無視します。 gulp スクリプトとそのスクリプト内の min ターゲットがトリガーされる次のような構文で、プロジェクト ファイル内に Target を追加することによって、これらのタスクを実行する呼び出しを追加できます。

<Target Name="MyPreCompileTarget" BeforeTargets="Build">
  <Exec Command="gulp min" />
</Target>

CSS ファイルと JavaScript ファイルを管理するための両方の方法の詳細については、「ASP.NET Core での静的資産のバンドルと縮小」のドキュメントを参照してください。