WebAPI的路由规则
1.自定义路由
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | public static class WebApiConfig { public static void Register(HttpConfiguration config) { // Web API 路由 config.MapHttpAttributeRoutes(); //1.默认路由 config.Routes.MapHttpRoute( name: "DefaultApi" , routeTemplate: "api/{controller}/{id}" , defaults: new { id = RouteParameter.Optional } ); //2.自定义路由一:匹配到action config.Routes.MapHttpRoute( name: "ActionApi" , routeTemplate: "actionapi/{controller}/{action}/{id}" , defaults: new { id = RouteParameter.Optional } ); //3.自定义路由二 config.Routes.MapHttpRoute( name: "TestApi" , routeTemplate: "testapi/{controller}/{ordertype}/{id}" , defaults: new { ordertype= "aa" , id = RouteParameter.Optional } ); } } |
得到了控制器对象之后,Api引擎通过调用IHttpActionSelector这个接口的SelectAction()方法去匹配action。这个过程主要包括:
- 解析当前的http请求,得到请求类型(是get、post、put还是delete)
- 如果路由模板配置了{action},则直接取到url里面的action名称
- 解析请求的参数
如果路由模板配置了{action},那么找到对应的action就很简单,如果没有配置action,则会首先匹配请求类型(get/post/put/delete等),然后匹配请求参数,找到对应的action。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | [HttpGet] public IHttpActionResult GetById( int id) { return Ok< string >( "Success" + id ); } [HttpPost] public HttpResponseMessage PostData( int id) { return Request.CreateResponse(); } [HttpPost] //http://xxx/api/savedata public HttpResponseMessage SavaData(ORDER order) { return Request.CreateResponse(); } |
2、最简单的特性路由
1 2 3 4 5 6 7 8 9 10 11 12 13 | [Route( "Order/SaveData" )] [HttpPost] public HttpResponseMessage SavaData(ORDER order) { return Request.CreateResponse(); } [Route( "ordertype/{id}/order" )] [HttpGet] public IHttpActionResult GetById( int id) { return Ok< string >( "Success" + id ); } |
特性路由的目的是为了解决我们公共路由模板引擎解决不了的问题。一个action定义了特性路由之后,就能通过特性路由上面的路由规则找,特性路由的规则可以使用“{}”占位符动态传递参数,比如我们有这样一个特性路由
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律