原文鏈接:https://blazor-university.com/routing/
路由
與標準 ASP.NET MVC 一樣,Blazor 路由是一種用于檢查瀏覽器 URL 并將其匹配到要呈現的頁面的技術。
路由比簡單地將 URL 匹配到頁面更靈活。它允許我們根據文本模式進行匹配,例如,上圖中的兩個 URL 都將映射到同一個組件并傳入一個 ID 用于上下文(在本例中為 1 或 4)。
模擬導航
當 Blazor 應用導航到同一應用中的新 URL 時,它實際上并沒有在傳統的 WWW 意義上導航。不會向請求新頁面內容的服務器發送請求。相反,Blazor 會重寫瀏覽器的 URL,然后呈現相關內容。
另請注意,當導航到解析為與當前頁面相同類型的組件的新 URL 時,組件不會在導航之前被銷毀,并且不會執行 OnInitialized*
生命周期方法。導航被簡單地視為對組件參數的更改。
定義路由
要定義路由,我們只需在任何組件的頂部添加 @page 聲明。
@page?"/"<h1>Hello,?world!</h1>Welcome?to?your?new?app.
如果我們打開此視圖的生成源代碼(在 obj\Debug\netcoreapp3.0\Razor\Pages\Index.razor.g.cs 中),我們會看到編譯為以下代碼的 @page 指令。
[Microsoft.AspNetCore.Components.LayoutAttribute(typeof(MainLayout))]
[Microsoft.AspNetCore.Components.RouteAttribute("/")]
public?class?Index?:?Microsoft.AspNetCore.Components.ComponentBase
{
}
@page
指令在組件的類上生成一個 RouteAttribute
。在啟動期間,Blazor 會掃描使用 RouteAttribute
修飾的類并相應地構建其路由定義。
路由發現
路由發現由 Blazor 在其默認項目模板中自動執行。如果我們查看 App.razor
文件,我們將看到路由器組件的使用。
…?other?code?…<Router?AppAssembly="typeof(Startup).Assembly">…?other?code?…</Router>
…?other?code?…
Router
組件掃描指定程序集中實現 IComponent
的所有類,然后反射該類以查看它是否使用任何 RouteAttribute
屬性進行修飾。對于它找到的每個 RouteAttribute
,它都會解析其 URL 模板字符串,并將從 URL 到組件的關系添加到其內部路由表中。
這意味著單個組件可以用零個、一個或多個 RouteAttribute
屬性(@page
聲明)裝飾。零個 RouteAttribute
屬性的組件無法通過 URL 訪問,而具有多個 RouteAttribute
屬性的組件可以通過它指定的任何 URL 模板訪問。
@page?"/"
@page?"/greeting"
@page?"/HelloWorld"
@page?"/hello-world"<h1>Hello,?world!</h1>
頁面也可以在組件庫中定義。