ASP.NET Core 路由模板中 * 与 ** 的区别详解 – 全面解析 {*slug} 与 {**slug}

14,536次阅读
没有评论

共计 2188 个字符,预计需要花费 6 分钟才能阅读完成。

在 ASP.NET Core 中,路由是处理 URL 请求的关键组件之一。路由模板允许我们定义特定格式的 URL,并将其映射到相应的处理程序或控制器动作。在路由模板中,我们可以使用 `*` 和 `**` 来捕获变量部分,并对它们进行处理。本文将着重讨论 `{*slug}` 和 `{**slug}` 的区别以及如何正确使用它们。

一句话区别解析

 单星号 * 会将匹配的路径中的斜杠 / 编码为 %2F,双星号 ** 会原封不动地保留斜杠 /

什么是路由模板?

ASP.NET Core 路由模板

在了解 `*` 和 `**` 的区别之前,让我们先了解一下路由模板的基本概念。路由模板是一个用于匹配 URL 的模式字符串,其中包含静态文本和可选的参数占位符。通过在模板中定义参数占位符,我们可以捕获 URL 中的特定部分,并将其传递给处理程序进行处理。

路由模板以斜杠 (`/`) 开始,并且可以包含静态文本、参数占位符和约束。参数占位符用花括号 (`{}`) 括起来,它们的名称由字母、数字和下划线组成。例如,`{controller}` 和 `{action}` 是两个常见的参数占位符,用于匹配控制器和动作的名称。

`*` 的使用

在路由模板中,`*` 用于捕获剩余的 URL 片段作为单个变量。当路由器遇到 `*` 时,它会尝试将之后的所有 URL 片段都捕获到一个变量中,直到遇到另一个 `/` 或结尾。这是一个非常有用的功能,特别是当我们不确定要捕获的 URL 片段数量时。

考虑以下示例路由模板:`/post/{id}/{*slug}`。这个模板定义了一个名为 `slug` 的变量,在第二个花括号后面的 `*` 表示任意数量的 URL 片段将被捕获到 `slug` 变量中。例如,对于 URL `/post/123/my-blog-post/on-asp-net-core`,`id` 参数将匹配 `123`,而 `slug` 参数将匹配 `my-blog-post/on-asp-net-core`。

在处理程序或控制器动作中,我们可以通过将参数名称与路由模板中的占位符相对应来接收捕获的值。在上面的示例中,我们可以定义一个控制器动作如下:

public IActionResult Post(int id, string slug)
{// 处理代码}

“`

通过这种方式,我们可以方便地使用 `slug` 变量来执行进一步的逻辑操作,例如解析 URL 片段并加载相应的内容。

`**` 的使用

与 `*` 相比,`**` 提供了更大的灵活性,并且可以用于捕获多个 URL 段或整个子目录结构。当我们在路由模板中使用 `**` 时,它将匹配任意数量的路径段,直到遇到结尾。这使得 `**` 特别适合处理深层次的 URL 路径和子目录结构。考虑以下示例路由模板:`/post/{id}/{**slug}`。这个模板定义了一个名为 `slug` 的变量,并使用 `**` 捕获所有的 URL 路径段,包括斜杠分隔符。

例如,对于 URL `/post/123/my-blog-post/on-asp-net-core`,`id` 参数将匹配 `123`,而 `slug` 参数将匹配 `my-blog-post/on-asp-net-core`。在这种情况下,`slug` 变量将捕获整个子目录结构,包括斜杠分隔符。

在处理程序或控制器动作中,我们可以通过将参数名称与路由模板中的占位符相对应来接收捕获的值。在上面的示例中,我们可以定义一个控制器动作如下:

public IActionResult Post(int id, string slug)
{// 处理代码}

` 通过这种方式,我们可以方便地使用 `slug` 变量来执行进一步的逻辑操作,例如解析 URL 路径并加载相应的内容。

`*` 与 `**` 的区别

虽然 `*` 和 `**` 都用于捕获变量部分,但它们之间存在一些关键区别:

  1. ** 数量的不同 **:`*` 只能捕获单个 URL 片段,而 `**` 可以捕获多个 URL 片段或整个子目录结构。

  2. ** 路径分隔符的处理 **:在使用 `*` 时,路径分隔符(斜杠)将会被当作普通字符来处理,并包含在捕获的变量值中。而在使用 `**` 时,路径分隔符将会被视为分隔路径段的标记,并不包含在捕获的变量值中。

  3. ** 适用场景的不同 **:`*` 是适用于捕获不确定数量 URL 片段的情况,特别是当我们希望将这些片段作为单个变量进行处理时。而 `**` 则适用于需要处理深层次的 URL 路径或子目录结构的情况。

总结

`*` 用于捕获不确定数量的 URL 片段作为单个变量,而 `**` 用于捕获整个子目录结构或多个 URL 段。对于不同的需求和场景,我们可以灵活地选择合适的占位符来定义路由模板,并在处理程序中利用捕获的变量进行后续操作。 文章来源地址 https://www.toymoban.com/diary/problem/633.html

到此这篇关于 ASP.NET Core 路由模板中 * 与 ** 的区别详解 – 全面解析 {*slug} 与 {**slug} 的文章就介绍到这了, 更多相关内容可以在右上角搜索或继续浏览下面的相关文章,希望大家以后多多支持 TOY 模板网!

原文地址:https://www.toymoban.com/diary/problem/633.html

如若转载,请注明出处:如若内容造成侵权 / 违法违规 / 事实不符,请联系站长进行投诉反馈,一经查实,立即删除!

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于1970-01-01发表,共计2188字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)