在 ASP.NET Core 中,路由是處理 URL 請求的關鍵組件之一。路由模板允許我們定義特定格式的 URL,并將其映射到相應的處理程序或控制器動作。在路由模板中,我們可以使用 `*` 和 `**` 來捕獲變量部分,并對它們進行處理。本文將著重討論 `{*slug}` 和 `{**slug}` 的區(qū)別以及如何正確使用它們。
一句話區(qū)別解析
單星號 * 會將匹配的路徑中的斜杠 / 編碼為 %2F,雙星號 ** 會原封不動地保留斜杠 /
什么是路由模板?
在了解 `*` 和 `**` 的區(qū)別之前,讓我們先了解一下路由模板的基本概念。路由模板是一個用于匹配 URL 的模式字符串,其中包含靜態(tài)文本和可選的參數(shù)占位符。通過在模板中定義參數(shù)占位符,我們可以捕獲 URL 中的特定部分,并將其傳遞給處理程序進行處理。
路由模板以斜杠 (`/`) 開始,并且可以包含靜態(tài)文本、參數(shù)占位符和約束。參數(shù)占位符用花括號 (`{}`) 括起來,它們的名稱由字母、數(shù)字和下劃線組成。例如,`{controller}` 和 `{action}` 是兩個常見的參數(shù)占位符,用于匹配控制器和動作的名稱。
`*` 的使用
在路由模板中,`*` 用于捕獲剩余的 URL 片段作為單個變量。當路由器遇到 `*` 時,它會嘗試將之后的所有 URL 片段都捕獲到一個變量中,直到遇到另一個 `/` 或結尾。這是一個非常有用的功能,特別是當我們不確定要捕獲的 URL 片段數(shù)量時。
考慮以下示例路由模板:`/post/{id}/{*slug}`。這個模板定義了一個名為 `slug` 的變量,在第二個花括號后面的 `*` 表示任意數(shù)量的 URL 片段將被捕獲到 `slug` 變量中。例如,對于 URL `/post/123/my-blog-post/on-asp-net-core`,`id` 參數(shù)將匹配 `123`,而 `slug` 參數(shù)將匹配 `my-blog-post/on-asp-net-core`。
在處理程序或控制器動作中,我們可以通過將參數(shù)名稱與路由模板中的占位符相對應來接收捕獲的值。在上面的示例中,我們可以定義一個控制器動作如下:
public IActionResult Post(int id, string slug) { // 處理代碼 }
```
通過這種方式,我們可以方便地使用 `slug` 變量來執(zhí)行進一步的邏輯操作,例如解析 URL 片段并加載相應的內容。
`**` 的使用
與 `*` 相比,`**` 提供了更大的靈活性,并且可以用于捕獲多個 URL 段或整個子目錄結構。當我們在路由模板中使用 `**` 時,它將匹配任意數(shù)量的路徑段,直到遇到結尾。這使得 `**` 特別適合處理深層次的 URL 路徑和子目錄結構。考慮以下示例路由模板:`/post/{id}/{**slug}`。這個模板定義了一個名為 `slug` 的變量,并使用 `**` 捕獲所有的 URL 路徑段,包括斜杠分隔符。
例如,對于 URL `/post/123/my-blog-post/on-asp-net-core`,`id` 參數(shù)將匹配 `123`,而 `slug` 參數(shù)將匹配 `my-blog-post/on-asp-net-core`。在這種情況下,`slug` 變量將捕獲整個子目錄結構,包括斜杠分隔符。
在處理程序或控制器動作中,我們可以通過將參數(shù)名稱與路由模板中的占位符相對應來接收捕獲的值。在上面的示例中,我們可以定義一個控制器動作如下:
public IActionResult Post(int id, string slug) { // 處理代碼 }
`通過這種方式,我們可以方便地使用 `slug` 變量來執(zhí)行進一步的邏輯操作,例如解析 URL 路徑并加載相應的內容。
`*` 與 `**` 的區(qū)別
雖然 `*` 和 `**` 都用于捕獲變量部分,但它們之間存在一些關鍵區(qū)別:
**數(shù)量的不同**:`*` 只能捕獲單個 URL 片段,而 `**` 可以捕獲多個 URL 片段或整個子目錄結構。
**路徑分隔符的處理**:在使用 `*` 時,路徑分隔符(斜杠)將會被當作普通字符來處理,并包含在捕獲的變量值中。而在使用 `**` 時,路徑分隔符將會被視為分隔路徑段的標記,并不包含在捕獲的變量值中。
**適用場景的不同**:`*` 是適用于捕獲不確定數(shù)量 URL 片段的情況,特別是當我們希望將這些片段作為單個變量進行處理時。而 `**` 則適用于需要處理深層次的 URL 路徑或子目錄結構的情況。文章來源:http://www.zghlxwxcb.cn/article/633.html
總結
`*` 用于捕獲不確定數(shù)量的 URL 片段作為單個變量,而 `**` 用于捕獲整個子目錄結構或多個 URL 段。對于不同的需求和場景,我們可以靈活地選擇合適的占位符來定義路由模板,并在處理程序中利用捕獲的變量進行后續(xù)操作。文章來源地址http://www.zghlxwxcb.cn/article/633.html
到此這篇關于ASP.NET Core 路由模板中 * 與 ** 的區(qū)別詳解 - 全面解析 {*slug} 與 {**slug}的文章就介紹到這了,更多相關內容可以在右上角搜索或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!