ヒント
このコンテンツは、Azure 用の ASP NET Web Forms 開発者向けの電子ブック Blazor からの抜粋です。 .NET Docs またはオフラインで読み取ることができる無料のダウンロード可能な PDF として入手できます。
ASP.NET 用に記述されたアプリケーションには、通常、HTML レンダリングと .NET 処理の両方で構成および使用できるサービスを制御するglobal.asax.cs
イベントを定義するApplication_Start
ファイルがあります。 この章では、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
既定のプロジェクト テンプレートでは、Web フォームの FriendlyUrlSettings
を追加して、アプリケーション URL で .ASPX
ファイル拡張子を省略できるようにします。 既定のテンプレートには、拡張子を省略したファイル名を持つフレンドリ URL に .ASPX
ページの永続的な HTTP リダイレクト状態コード (HTTP 301) を提供するディレクティブも含まれています。
ASP.NET Core と Blazor では、これらのメソッドは簡略化され、 Startup
クラスに統合されるか、一般的な Web テクノロジを優先して排除されます。
Blazor サーバーのスタートアップ構造
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 ページ、MVC コントローラー ルーティング、SignalR、Blazor Server の対話などの機能を有効にするサービスが追加されます。 ASPX、ASCX、ASHX、および ASMX ファイルの解析と処理は、web.config 構成ファイル内の ASP.NET を参照することによって定義されていたので、このメソッドは Web フォームでは必要ありません。 ASP.NET Core での依存関係の挿入の詳細については、 オンライン ドキュメントを参照してください。
app
によってbuilder
がビルドされた後、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 ルーターが実行され、カウンター ページがレンダリングされます。
最後の行がアプリケーションを起動します。Web フォームでは必要ありませんでした (IIS を実行するために依存していたため)。
BundleConfig プロセスのアップグレード
CSS スタイルシートや JavaScript ファイルなどのアセットをバンドルするためのテクノロジは大幅に変更されており、他のテクノロジでは、これらのリソースを管理するためのツールと手法が急速に進化しています。 そのためには、Grunt/Gulp/WebPack などの Node コマンドライン ツールを使用して、静的アセットをパッケージ化することをお勧めします。
Grunt、Gulp、WebPack のコマンド ライン ツールとそれに関連する構成をアプリケーションに追加できます。ASP.NET Core では、アプリケーションのビルド プロセス中にこれらのファイルが静かに無視されます。 gulp スクリプトとそのスクリプト内のTarget
ターゲットをトリガーする次のような構文を使用して、プロジェクト ファイル内にmin
を追加することで、タスクを実行する呼び出しを追加できます。
<Target Name="MyPreCompileTarget" BeforeTargets="Build">
<Exec Command="gulp min" />
</Target>
CSS ファイルと JavaScript ファイルを管理するための両方の戦略の詳細については、 ASP.NET Core ドキュメントのバンドルと静的資産の縮小に関する ページを参照してください。
.NET