ASP.NET Core 是微软开发的一个开源框架,用于构建高性能、现代化的 web 应用程序。在 ASP.NET Core 中,路由是应用程序的核心组件之一,它负责将客户端的请求映射到相应的控制器和动作。本文将深入探讨如何在 ASP.NET Core 中使用基于特性的路由。 路由在 ASP.NET Core 中有两种主要模式:基于约定(Conventional)和基于特性(Attribute-based)。基于约定的路由通常在全局配置中定义,适用于大多数情况,而基于特性的路由允许我们在控制器或动作方法上直接指定路由规则,提供了更大的灵活性。 在基于特性路由中,我们可以使用 `Route` 特性来定义控制器和动作的方法。例如,在 `DefaultController` 中,`Index` 动作方法上有三个 `Route` 特性,分别定义了不同的路径: ```csharp [Route("")] [Route("Default")] [Route("Default/Index")] public ActionResult Index() ``` 这意味着 `Index` 方法可以通过 `/`, `/Default` 或 `/Default/Index` 这三个 URL 访问。然而,这样的定义并不理想,因为有重复的部分。为了优化,我们可以将公共部分(如 `Default`)提升到控制器级别: ```csharp [Route("Default")] public class DefaultController : Controller { [Route("")] [Route("Index")] public ActionResult Index() ... } ``` 这样,`Index` 方法只需 `[Route("")][Route("Index")]` 就可以覆盖所有情况,因为 ASP.NET Core 路由引擎会自动合并控制器和动作的路由。 此外,我们还可以使用 `HttpGet` 特性来指定 HTTP 方法类型,如: ```csharp [HttpGet] [Route("GetRecordsById/{id}")] public ActionResult GetRecordsById(int id) ``` 这里,`GetRecordsById` 方法会响应 GET 请求,并通过 `{id}` 参数接收整型 ID。注意,`HttpGet` 特性是可选的,但添加它可以提高代码的可读性和可维护性。 在某些情况下,可能希望为整个控制器设置一个前缀,这时可以使用 `RoutePrefix` 特性(虽然在 ASP.NET Core 2.0 及以后的版本中已被弃用,但仍然可以使用第三方库实现类似功能): ```csharp [RoutePrefix("services")] public class HomeController : Controller ``` 这样,`HomeController` 中的所有动作都会有一个 `services` 的前缀。 基于约定的路由通常在启动配置中定义,例如: ```csharp app.UseEndpoints(endpoints => { endpoints.MapControllerRoute( name: "default", pattern: "{controller=Home}/{action=Index}/{id?}"); }); ``` 这里的模板 `{controller=Home}/{action=Index}/{id?}` 指定了默认的控制器(Home)和动作(Index),以及可选的 ID 参数。 基于特性的路由也可以包含参数模式,就像基于约定的路由一样。例如,`DefaultController.GetRecordsById` 方法的路由模板 `Default/GetRecordsById/{id}` 就包含了参数 `id`。当请求到达时,`id` 参数会被自动绑定到对应的动作方法参数上。 总结来说,ASP.NET Core 中基于特性的路由提供了一种灵活的方式来定义和组织应用的路由结构。通过在控制器和动作方法上使用 `Route` 特性,我们可以精确地控制哪些 URL 能触发哪些操作,同时可以利用参数模式来传递数据。这使得 ASP.NET Core 应用程序的路由更加清晰,易于理解和维护。



















剩余8页未读,继续阅读


- 粉丝: 1w+
我的内容管理 展开
我的资源 快来上传第一个资源
我的收益
登录查看自己的收益我的积分 登录查看自己的积分
我的C币 登录后查看C币余额
我的收藏
我的下载
下载帮助


最新资源
- 大连网通无线网络规划设计.doc
- VMware虚拟化及云计算管理解决方案(XXXX版).pptx
- java图书管理窗口实训报告.docx
- 2022网络公司的实习报告.docx
- 2022网络教研心得体会.docx
- 2023年赤峰市专业技术人员在线培训网敖汉旗教师继续教育网络课.docx
- CAD室内设计施工图[全套].doc
- hadoop随笔记录.doc
- 2023年浙江省二级C语言程序编写题库.doc
- 2022网络搞笑经典语句.docx
- plc电气控制系统设计.pptx
- cad打印怎么设置黑白颜色参考.doc
- 单片机鸡雏恒温孵化器课程设计说明书.doc
- 第1章网络工程设计概述.pptx
- Dell笔记本BIOS设置介绍.doc
- XXXX第16章电力系统自动化技术.pptx


