📜  ASP.NET Core-路由(1)

📅  最后修改于: 2023-12-03 15:29:30.094000             🧑  作者: Mango

ASP.NET Core-路由

在 Asp.NET Core 中,路由是一种将请求映射到处理程序的机制。路由是以URL路径和查询参数作为依据来确定如何处理 HTTP 请求的。通过配置路由,我们可以创建具有清晰语义的 URL,从而提高了应用程序的可读性和可维护性。

路由的类型

在 Asp.NET Core 中,我们可以使用两种路由类型:Convention-based Routing和Attribute Routing。

Convention-based Routing

Convention-based Routing 是基于一组约定来配置路由的方式。默认情况下,Asp.NET Core 使用路由模板 {controller=Home}/{action=Index}/{id?} 来定义 Convention-based Routing。

控制器名称

路由的第一个部分是 controller(控制器名称)。控制器名称放在 URL 路径的开始位置。在 URL 中,控制器名称之后会显示「/」。

例如:

https://www.example.com/Products/List

上面的 URL 中,控制器名称为 Products,在 URL 中被指定为 Products/List

动作名称

路由的下一个部分是 action(动作名称)。控制器中的一个公共的方法被称为一个动作。动作名称放在控制器的后面并用斜线隔开。动作名称不是必需的,因为控制器也可以处理路由请求,但默认情况下,Asp.NET Core 希望你在路由中声明动作名称。

例如:

https://www.example.com/Products/Details/1

上面的 URL 中,动作名称为 Details,在 URL 中被指定为 Products/Details/1

路由参数

在控制器中,我们可以使用路由参数来取代常规的查询参数。路由参数显式地出现在路由模板中。路由参数前加一个大括号 {},它表示一个属性,它的数据可以在路由中被替换。

例如:

https://www.example.com/Products/Search/keyword

上面的 URL 中,keyword 是路由参数,用来在数据库中执行搜索操作。搜索关键字经由 URL 传递到服务器。

Attribute Routing

另一种配置路由的方式是 Attribute Routing。Attribute Routing 是基于方法和属性的 RouteAttribute 属性来配置的。

[Route("api/orders")]
public class OrdersController : Controller
{
    [HttpGet("{id}")]
    public IActionResult GetOrder(int id) { ... }

    [HttpGet("~/orders/{id}/items")]
    public IActionResult GetOrderItems(int id) { ... }
}

上面代码中的 Controller 派生类及其方法都是通过设置路由属性来进行命名。

在路由模板中,可以包含路由参数,如 "{id}"。在这里,可以看到我们设置了两个路由。第一个路由是针对 OrdersController 的,这个控制器下面的所有方法都应该位于 "/api/orders" 的一个 URL 下。第二个路由是一个 Action 上的路由,它位于 "orders/{id}/items"。使用 "~" 符号,可以告诉 Razor Pages 或 MVC,使用不应基于其带有 RouteAttribute 的控制器进行的路由。

结论

路由是 Asp.NET Core 应用程序的一个重要组成部分。充分了解 Asp.NET Core 中的路由架构,可以帮助开发人员更好的优化网站的 URL 结构,更好的处理各种 HTTP 请求,从而提高应用程序的可读性和可维护性。