由于工作的原因,断断续续终于看完了《ASP.NET Web API 2 框架揭秘》第二章关于WebApi的路由系统的知识。
路由系统是请求消息进入Asp.net WebApi的第一道屏障,其根本目的利用注册的路由表对请求的URI进行解析以确定目标HttpController和Action的名称,以及与某个Action方法某个参数进行绑定的路由变量。
Asp.net webApi中的路由系统和Asp.net中的路由系统很相似,也有Route,只是WebApi的路由系统又独立于Asp.net的路由系统,实现类也在不同的命名空间下。所以在讲Asp.net WebApi路由之前先来谈谈Asp.net路由系统。
一、Asp.net 路由
Asp.net MVC的路由完全由 Asp.net路由系统来完成 ,但是后者并非专门为前者设计 ,其实它最初是为了帮助 WebForm应用实现 “请求地址与物理文件的分离” 而设计的。
1.1 请求Url与物理文件的分离:类似于www.xxx.com/default.aspx这类没有把url与物理地址分开的做法的局限性体现在一下几个方面,1.灵活性(物理文件路径发生变化,链接无效);2.可读性;3.SEO优化。
解决上面问题,URL路由系统,通过托管代码实现URL与物理文件的分离。
下面示例展示了通过URL路由实现请求地址与web页面的映射。示例地址:员工列表与员工信息示例
1 namespace WebApp 2 { 3 public class Global : System.Web.HttpApplication 4 { 5 protected void Application_Start(object sender, EventArgs e) 6 { 7 var defaults = new RouteValueDictionary { { "name", "*" }, { "id", "*" } }; 8 RouteTable.Routes.MapPageRoute("", "employees/{name}/{id}","~/default.aspx", true, defaults); 9 } 10 } 11 } 12