共用方式為


應用程式啟動

提示

此內容節錄自《適用於 ASP NET Web Forms Developers for Azure 的 Blazor》電子書,可以從 .NET Docs 取得,或免費下載可離線閱讀的 PDF。

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

針對 ASP.NET 撰寫的應用程式通常會有 global.asax.cs 檔案,這會定義 Application_Start 事件,可控制哪些服務已設定並可供 HTML 轉譯和 .NET 處理使用。 本章將探討 ASP.NET Core 和 Blazor Server 如何稍微不同。

Application_Start 和 Web Form

預設 Web Form Application_Start 方法已隨著用途成長,可處理許多設定工作。 Visual Studio 2022 中具有預設範本的全新 Web Form 專案現在包含下列設定邏輯:

  • RouteConfig - 應用程式 URL 路由
  • BundleConfig - CSS 和 JavaScript 統合和縮製

每個個別檔案都位於 App_Start 資料夾中,而且只在應用程式開始時執行一次。 RouteConfig 在預設專案範本中,會新增 Web Form 的 FriendlyUrlSettings,以允許應用程式 URL 省略 .ASPX 副檔名。 預設範本也包含指示詞,該指示詞會以省略副檔名的檔案名稱將 .ASPX 頁面的永久 HTTP 重新導向狀態碼 (HTTP 301) 提供給易記 URL。

透過 ASP.NET Core 和 Blazor,這些方法會簡化並合併到 Startup 類別中,也可以消除這些方法,以利於採用常見的 Web 技術。

Blazor Server 啟動結構

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 互動等功能的服務。 Web Form 中不需要這個方法,因為 ASPX、ASCX、ASHX 和 ASMX 檔案的剖析和處理是藉由在 web.config 設定檔中參考 ASP.NET 來定義。 如需 ASP.NET Core 中相依性插入的詳細資訊,請參閱線上文件

builder 建置 app 之後,app 上的其餘呼叫會設定其 HTTP 管道。 透過這些呼叫,我們會從上到下宣告中介軟體,以處理傳送至應用程式的每個要求。 預設設定中的大部分功能都散佈在 Web Form 設定檔中,而且現在集中於一處,方便參考。

自訂錯誤頁面設定不再放置於 web.config 檔案中,但如果應用程式環境未加上標籤 Development,此時會設定為一律顯示。 此外,ASP.NET Core 應用程式現在已設定為使用 TLS 提供安全頁面,預設會使用 UseHttpsRedirection 方法呼叫。

接下來,對 UseStaticFiles 進行未預期的設定方法呼叫。 在 ASP.NET Core 中,必須明確啟用靜態檔案 (例如 JavaScript、CSS 和影像檔案) 的要求,而且預設只有應用程式 wwwroot 資料夾中的檔案可公開定址。

下一行是從 Web Form 複寫其中一個設定選項的第一行:UseRouting。 這個方法會將 ASP.NET Core 路由器新增至管道,而且可以在此處或在可考慮路由傳送的個別檔案中設定。 如需路由設定的詳細資訊,請參閱路由一節

本節的最後 app.Map* 呼叫會定義 ASP.NET Core 正在接聽的端點。 這些路由是 Web 存取位置,您可以在網頁伺服器上存取,並接收由 .NET 處理並傳回給您的某些內容。 第一個項目 MapBlazorHub 會設定 SignalR 中樞,以便用來提供處理 Blazor 元件狀態和轉譯的伺服器所用的即時和持續性連線。 MapFallbackToPage 方法會呼叫表示啟動 Blazor 應用程式的網頁可存取 Web 位置,也會設定應用程式處理來自用戶端的深層連結要求。 如果您開啟瀏覽器並直接瀏覽至應用程式中的 Blazor 已處理路由,例如預設專案範本中的 /counter,您將會看到此功能。 要求會由 _Host.cshtml 後援頁面處理,然後執行 Blazor 路由器並轉譯計數器頁面。

最後一行會啟動應用程式,在 Web Form 中不需要這麼做 (因為需要 IIS 執行才能這麼做)。

升級 BundleConfig 流程

CSS 樣式表單和 JavaScript 檔案等資產的統合技術已大幅變更,其他技術則提供快速演進的工具和技術來管理這些資源。 為此,我們建議使用節點命令列工具,例如 Grunt / Gulp / WebPack 來封裝靜態資產。

Grunt、Gulp 和 WebPack 命令列工具及其相關聯的設定可以新增至您的應用程式,而 ASP.NET Core 會在應用程式建置流程期間以無訊息方式忽略這些檔案。 您可以新增呼叫來執行其工作,方法是在專案檔中新增 Target,其語法類似下列語法,以觸發 gulp 指令碼和該指令碼內的 min 目標:

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

如需管理 CSS 和 JavaScript 文件案策略的詳細資訊,請參閱在 ASP.NET Core 中搭售和縮小靜態資產文件。