📅  最后修改于: 2023-12-03 15:29:30.094000             🧑  作者: Mango
在 Asp.NET Core 中,路由是一种将请求映射到处理程序的机制。路由是以URL路径和查询参数作为依据来确定如何处理 HTTP 请求的。通过配置路由,我们可以创建具有清晰语义的 URL,从而提高了应用程序的可读性和可维护性。
在 Asp.NET Core 中,我们可以使用两种路由类型:Convention-based Routing和Attribute 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 是基于方法和属性的 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 请求,从而提高应用程序的可读性和可维护性。