ASP.NET 路由

管理员

ASP.NET 路由使您可以使用不必映射到网站中特定文件的 URL。由于 URL 不必映射到文件,所以可以在 Web 应用程序中使用 URL,这些 URL 是描述性的用户操作,因此更易于被用户理解。

在一个不使用路由的 ASP.NET 应用程序中,对 URL 的传入请求通常映射到磁盘上的物理文件,如 .aspx 文件。在 ASP.NET 路由中,您可以定义 URL 模式,该模式包含在处理 URL 请求时使用的值的占位符。在运行时,应用程序名称后面的 URL 部分根据您所定义的 URL 模式分析为离散值。

ASP.NET 路由不同于其他 URL 重写方案。URL 重写通过在将请求发送到网页之前实际更改 URL 来处理传入请求。此外,URL 重写通常没有相应的 API 来创建基于模式的 URL。在 URL 重写中,如果更改了 URL 模式,则必须手动更新包含原始 URL 的所有超链接。

由于 ASP.NET 路由可以从 URL 提取值,所以处理传入请求时不更改 URL。如果必须创建一个 URL,则将参数值传递到为您生成 URL 的方法中。若要更改 URL 模式,请在某位置更改该模式,您在应用程序中创建的基于该模式的所有链接将自动使用新模式。

定义的 URL 模式称作“路由”。在路由中,您可以指定占位符,用于映射到从 URL 请求中分析的值。您还可以指定用于匹配 URL 请求的常量值。

在路由中,您可以通过用大括号( { 和 })括住占位符来定义占位符(称为“URL 参数”)。分析 URL 时将/ 字符解释为分隔符。将路由定义中不是分隔符和不在大括号中的信息视为一个常量值。将从两个分隔符之间提取的值分配给占位符。

您可以在分隔符之间定义多个占位符,但必须用一个常量值分隔开。

ASP.NET 路由调试

在Mix会议上,Scott Hanselman’s演示了一个简单的route测试程序(route tester),这个工具会显示当前地址栏中请求地址里存在的Route数据内容(页面里的Route Data)。因此你可以在地址栏中输入各种Urls来观察它匹配了哪一个路径。在页面底部,显示了你的程序中所有被定义的route列表。它可以让你看到当前的URL匹配哪个你定义的route。 这个工具的用处在于,有时候你希望的匹配路径却被其他的路径定义所代替。它可以向你展示出发生了这种情况。

要使用这个工具,只要下载这个zip文件,然后把dll文件放到你的程序的Bin目录里,再在Global.asax.cs文件的Appliation_Start函数里添加一行代码(黑体字的)。

protected void Application_Start(object sender, EventArgs e) {   RegisterRoutes(RouteTable.Routes); RouteDebug.RouteDebugger.RewriteRoutesForTesting(RouteTable.Routes); }

它会使用DebugRouteHandler来更新那些你的应用中所有的route处理程序(IRouteHandler),这些route处理程序原本是为了处理程序中每个不同的route特别定义的。

具体参看:ASP.NET Routing Debugger

http://www.informit.com/content/images/9780672329982/samplepages/0672329980_CH02.pdf