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

在 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/article/633.html

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

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

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

领支付宝红包赞助服务器费用

相关文章

  • 全面的ASP.NET Core Blazor简介和快速入门

    全面的ASP.NET Core Blazor简介和快速入门

      因为咱们的MongoDB入门到实战教程Web端准备使用Blazor来作为前端展示UI,本篇文章主要是介绍Blazor是一个怎样的Web UI框架,其优势和特点在哪?并带你快速入门上手ASP.NET Core Blazor(当然这个前提是你要有一定的C#编程基础的情况,假如你完全没有接触过C#的话建议你先从基本语

    2024年02月19日
    浏览(6)
  • ASP.NET和ASP.NET Core的区别

    ASP.NET和ASP.NET Core是两个不同的Web应用程序框架,它们都是由Microsoft开发的。ASP.NET是Microsoft推出的第一个Web应用程序框架,而ASP.NET Core是其最新版本。本文将介绍ASP.NET和ASP.NET Core的简介和区别。 ASP.NET的简介 ASP.NET是一个基于.NET框架的Web应用程序框架,它是Microsoft推出的第一

    2024年02月16日
    浏览(35)
  • ASP.NET Core中路由规则匹配

    RESTful约束,如果在一个控制器里面有多个Get、Post...的操作 1、在一个控制器里面可以定义多个API方法 2、通过路由规则来区分 /// summary /// 获取用户信息 /// /summary /// param name=\\\"user\\\"/param /// returns/returns [HttpGet] public User GetUser() {     //... } GetUser()对应的Request URL:https://localhost:71

    2024年02月13日
    浏览(35)
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(一)

    在Web应用中,路由是一个至关重要的概念,它负责将用户的请求映射到相应的处理程序,以确保正确的页面或资源被呈现给用户。通过将用户请求与适当的处理程序关联起来,使得应用能够以有序和可维护的方式响应用户的操作。 一、ASP.NET Core路由基础 1.1 路由的定义和作用

    2024年01月19日
    浏览(36)
  • 【ASP.NET Core 基础知识】--路由和请求处理--路由概念(二)

    一、路由参数传递方式 1.1 查询字符串参数 在路由中,查询字符串参数是一种常见的方式传递信息。这种方式通过URL中的查询字符串(?key1=value1key2=value2)将参数附加到请求中。在ASP.NET Core中,可以通过以下方式在控制器动作方法中接收查询字符串参数: 在上述例子中,查询

    2024年01月21日
    浏览(130)
  • ASP.NET Core MVC 从入门到精通之路由

    ASP.NET Core MVC 从入门到精通之路由

    随着技术的发展,ASP.NET Core MVC也推出了好长时间,经过不断的版本更新迭代,已经越来越完善,本系列文章主要讲解ASP.NET Core MVC开发B/S系统过程中所涉及到的相关内容,适用于初学者,在校毕业生,或其他想从事ASP.NET Core MVC 系统开发的人员。 经过前几篇文章的讲解,初步

    2023年04月14日
    浏览(15)
  • asp.net core框架搭建1-搭建webapi,对数据增删改查接口模板(附源码)

    asp.net core框架搭建1-搭建webapi,对数据增删改查接口模板(附源码)

    作者:xcLeigh 文章地址:https://blog.csdn.net/weixin_43151418/article/details/131458922 asp.net core 框架搭建2-搭建webapi ,本文章介绍asp.net core webapi框架搭建,然后开发增删改查和工具接口,将一步步带着大家,实现目标。所有操作过程将展现在本篇文章,下面咋们一起来实现它吧。 asp.ne

    2024年02月13日
    浏览(8)
  • ASP.NET Core Web API入门之二:Swagger详细使用&路由设置

    ASP.NET Core Web API入门之二:Swagger详细使用&路由设置

    本篇文章是Swagger的详细使用,续上篇ASP.NET Core Web API入门之一:创建新项目。 Swagger 是一个规范和完整的框架,用于生成、描述、调用和可视化 RESTful 风格的 Web 服务的接口文档。 根据在代码中使用自定义的注解来生成接口文档,这个在前后端分离的项目中很重要。这样做的

    2024年02月15日
    浏览(7)
  • 2.1 .net 8 ASP.NET Core Web API - Controller详解

    2.1 .net 8 ASP.NET Core Web API - Controller详解

    书接上回,上节我们留了几个问题,即: 1、接口Hello的名字究竟怎么来的? 2、我们如果想把接口改成其他的名称,应该怎么做? 3、我们继承ControllerBase,以及[Route(“[controller]”)]属性,又是分别起到什么作用? 需要解决以上几个问题,我们就要继续深入研究Controller相关的

    2024年02月20日
    浏览(8)
  • 【一文详解】知识分享:(ASP.Net Core基础学习及快速入门)

    【一文详解】知识分享:(ASP.Net Core基础学习及快速入门)

    .Net .NET是微软的一个开发平台,这个平台的一大特点就是跨语言性,不管是什么语言,c、c++、c#、F#、J#、vb等语言都可以用这个平台合作开发; .NET,它是微软创建的一个用于构建多种不同类型的应用程序的开发人员平台。 .NET 是一个广泛的术语,用于描述整个 Microsoft 的软件

    2024年02月01日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包