VS2010与.NET4系列 8. ASP.NET 4 Web Forms的URL路由

今天介绍 ASP.NET 4 的一项新的运行时特性――即基于 ASP.NET Web Forms 的 URL 路由能力。

什么是 URL 路由?

URL路由是在 ASP.NET 3.5 SP1 中首次引入的一种能力,它已经用于 ASP.NET MVC 应用程序内部来暴露一个干净的、SEO友好的 "Web 2.0" URL。URL路由可以配置应用程序接受不映射到物理文件的请求URL。相反,可以使用路由定义对用户有语义意义的URL,并能帮助搜索引擎优化(SEO)。

例如,一个显示产品分类的传统页面的URL看起来可能像这样:

http://www.mysite.com/products.aspx?category=software

使用 ASP.NET 4 中的URL路由引擎,可以配置应用程序接受下面的 URL 来表示相同的信息:

http://www.mysite.com/products/software

使用 ASP.NET 4,上面的URL既能够映射到 ASP.NET MVC 控制器,同时也能够映射到 ASP.NET Web Forms 页面。

使用 ASP.NET MVC 映射 URL

ASP.NET 3.5 SP1 引入的 URL 路由提供了强大的方法来处理入站的 URL。通常,要编写代码让应用程序在启动时把指定的 URL 格式注册/映射到匹配的代码处理程序上。

下面就是这样的一个例子,它使用 ASP.NET MVC 把 /product/software URL 映射到名为 "Products" 的控制器上,其中动作方法(action method)名为 "Browse":

step1

MapRoute() 辅助方法的第一个参数 "product-browser" 是为路由提供一个友好的名称。第二个参数 "products/{category}" 是匹配 /products/software URL的 URL过滤器,其中 URL 的第二段作为名为 "category" 的值。这个参数随后将会被传递给 ProductsController 的 Browse() 动作方法进行处理。

使用 ASP.NET Web Forms 映射 URL

ASP.NET 4 现在允许使用 URL 路由引擎把 URL 映射到 ASP.NET Web Forms 页面和 ASP.NET MVC 控制器。

下面是一个在 ASP.NET 4 中使用新的 MapPageRoute() 辅助方法把 /products/software URL 映射到 "Products.aspx" 页面的例子,代码位于应用程序的根目录下:

step2

MapPageRoute() 辅助方法的前两个参数和 MapRoute() 相同。第一个参数为路由提供了一个友好的名称,第二个参数指定了匹配的 URL 格式。第三个参数,则指向了 Products.aspx 页面而不是控制器类来处理 URL。还能可选地指定额外的参数给 MapPageRoute(),从而充分利用像“路由限制”的特性并提供“默认的参数值”,就像在基于 ASP.NET MVC 的路由注册中做的那样。

接着在 Products.aspx 页面内部,就可以编写使用 ASP.NET 4 中新增的 Page.RouteData 属性来获取使用 /products/{category} URL过滤器映射的 "category" 参数的值,并将分类产品进行数据绑定以显示它们:

step3

除了编写代码访问入站的路由参数,还可以利用新的声明式的 <asp:routeparameter> 控件配合任何 DataSource 控件来声明式地从路由绑定值。例如,下面使用了 <asp:routeparameter> 语句从 URL路由中的 /products/{category} 参数绑定了 select 语句的 @category 参数:

step4

在 ASP.NET Web Forms 内部获取 URL

ASP.NET 中的 URL 路由引擎既能够用于把入站的 URL 映射到代码处理程序,同时也能够使用相同的映射注册逻辑编程产生出站的 URL。

例如,上面我们给映射提供了一个“友好名称”即 "products-name"。这就允许我们使用新的 Page.GetRouteUrl() 辅助方法在 URL 路由系统中查找路由,可选地指定参数给它,然后获取它映射回来的真实 URL。例如,下面的代码会获取 "/products/software" 的 URL 值:

step6

可以在代码后置文件中或 .aspx 标记中访问上述的辅助方法。

现在还有一个 Response.RedirectToRoute() 方法集,能够用于把用户重新定向对一个路由(不管是 MVC 还是 Web Forms 来处理)并可选地传递参数给它。

处理回送(PostBack)场景

使用 ASP.NET 4 的 URL 路由完全支持回送场景。<form runat="server"> 控件会自动地发出呈现页面相同的 URL。例如,如果你使用 /produts/software URL 访问页面,那么页面中的 <form runat="server"> 控件会呈现出 <form action="/products/software"> HTML 元素到客户端,这意味着发生在页面上的任何回送场景都将保留最初的 URL。

这样就让使用 Web Forms 和回送场景支持干净、SEO 友好的 URL 变得容易了,并避免了当使用 URL 重写模块达到类似效果的人们还要去使用一些技巧。

总结

ASP.NET 4.0 同时让使用 ASP.NET MVC 和 ASP.NET Web Forms 实现干净的、SEO 友好的 URL 变得容易。

URL 路由引擎让注册任何类型的格式的URL 并将其映射到任何处理程序变得容易。因为URL 路由引擎可以同时用于映射入站URL和产生出站URL,所以可以在以后更改URL映射而不必修改任何页面或控制器的特定代码,这让构建 SEO 优化的应用程序更加容易。

你可能感兴趣的:(Web,mvc,asp.net,Routing,4,Forms)