小提示
為 ASP.NET 撰寫的應用程式通常會有一個 global.asax.cs 檔案,其 Application_Start 定義事件,可控制哪些服務已設定並可供 HTML 轉譯和 .NET 處理使用。 本章將探討 ASP.NET Core 和 Blazor Server 的情況稍有不同。
Application_Start和Web Forms
多年來,預設的 Web Forms Application_Start 方法已經在功能上擴展,用於處理許多配置任務。 Visual Studio 中以預設範本的新網頁表單專案包含以下設定邏輯:
-
RouteConfig- 應用程式 URL 路由 -
BundleConfig- CSS 和 JavaScript 組合和縮製
每一個個別檔案都位於資料夾中, App_Start 並在應用程式開始時只執行一次。
RouteConfig 在預設項目範本中,為網頁表單新增 FriendlyUrlSettings,以允許應用程式 URL 省略 .ASPX 檔案延伸。 默認範本也包含一個指令,可為這些頁面提供永久的 HTTP 重定向狀態碼(HTTP 301),.ASPX 指向以省略擴展名的檔名建立的友好的 URL。
透過 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 互動等功能。 Web 表單中不需要此方法,因為 aspX、ASCX、ASHX 和 ASMX 檔案的剖析和處理是由參考 web.config 組態檔中的 ASP.NET 所定義。 如需 ASP.NET Core 中相依性插入的詳細資訊,請參閱 在線檔。
在app建置builder之後,其餘的函數呼叫會設定app的 HTTP 管線。 透過這些呼叫,我們會從上到下宣告 中間件 ,以處理傳送至應用程式的每個要求。 默認組態中的大部分功能分散在 Web 窗體組態檔中,現在位於一個位置,方便參考。
自定義錯誤頁面的組態不再是放置於 web.config 檔案中,而是設定為在應用程式環境未被加上 Development 標籤時一律顯示。 此外,ASP.NET Core 應用程式現在預設配置為透過 UseHttpsRedirection 方法呼叫使用 TLS,從而提供安全頁面。
接下來,對UseStaticFiles的某個對象進行非預期的組態方法呼叫。 在 ASP.NET Core 中,必須明確啟用靜態檔案(例如 JavaScript、CSS 和圖像檔)的要求,而且預設只有應用程式 wwwroot 資料夾中的檔案可以公開尋址。
下一行是第一個複製了網頁表單的組態選項之一:UseRouting。 這個方法會將 ASP.NET Core 路由器新增至管線,而且可以在這裡或各個檔案中設定它可考慮作為路由目的地。 如需路由設定的詳細資訊,請參閱 路由一節。
本節中的最後 app.Map* 呼叫會定義 ASP.NET Core 正在接聽的端點。 這些路由是 Web 可存取的位置,您可以在網頁伺服器上存取,並接收 .NET 處理的一些內容,並傳回您。 第一個項目 MapBlazorHub 設定 SignalR 中樞,以便提供處理 Blazor 元件狀態和轉譯之伺服器的即時和持續的連接。 方法 MapFallbackToPage 呼叫會指出啟動 Blazor 應用程式的網頁可存取位置,也會設定應用程式來處理來自用戶端的深層連結要求。 如果您開啟瀏覽器並直接導航到應用程式中的 Blazor 所處理的路由,例如在預設專案範本中的 /counter,您將會看到這項功能。 要求會由 _Host.cshtml 後援頁面處理,然後執行 Blazor 路由器並轉譯計數器頁面。
最後一行會啟動應用程式,這是 Web 窗體中不需要的內容(因為它依賴 IIS 才能執行)。
升級 BundleConfig 進程
CSS 樣式表單和 JavaScript 檔案等組合資產的技術已大幅變更,其他技術則提供快速演進的工具和技術來管理這些資源。 為此,我們建議使用 Node 命令行工具,例如 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 核心檔中的靜態資產 。