09-5
29

ASP.NET 4.0中的Routing功能

发布:TerryLee | 分类:技术文章

在以前的ASP.NET应用程序开发中,大家一直在为了URL更加友好而努力,于是乎出现了各种各样的URL Rewritting组件,但是URL Rewritting又有着先天的缺陷,它仅仅是单向的,只负责将相关的请求转到正确得HttpHandler上面去。在.NET Framework 3.5 SP1中,微软发布了一个Routing组件,其中ASP.NET MVC中就是使用该组件进行URL Routing,从而实现了非常友好的URL。Routing组件支持双向作用,既可以解析URL交给相关得HttpHandler来处理,同时也能根据相应的路由规则来生成正确的URL。现在在ASP.NET 4.0中已经内置了Routing功能,所以我们可以直接使用。

首先在Web.config中配置RoutingModule,如下代码所示,加在httpModules配置节中:

   1: <add name="RoutingModule" 
   2:     type="System.Web.Routing.UrlRoutingModule, 
   3:     System.Web.Routing, Version=4.0.0.0, 
   4:     Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>

在HttpApplication启动时注册相关的Routing规则:

   1: protected void Application_Start(object sender, EventArgs e)
   2: {
   3:     RouteTable.Routes.Add("UserRoute", new Route("Users/{username}",
   4:         new PageRouteHandler("~/Users.aspx")));
   5: }

此处用户访问类似于/Users/TerryLee这样的URL时,会转到Users.aspx进行处理。最终在Users.aspx页面中我们可以通过RouteData来获取相关参数:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     this.Literal1.Text = RouteData.Values["username"].ToString();
   4: }

效果如图所示:

aspnet4_001

前面我们说了Routing的作用是双向的,下面看一下如何通过Routing规则来生成URL,如下示例代码:

   1: protected void Page_Load(object sender, EventArgs e)
   2: {
   3:     VirtualPathData pathData =
   4:         RouteTable.Routes.GetVirtualPath(
   5:                             null,
   6:                             "UserRoute",
   7:                             new RouteValueDictionary { { "username", "TerryLee" } });
   8:     HyperLink1.NavigateUrl = pathData.VirtualPath;
   9: }

最终生成的URL为:

   1: <a id="HyperLink1" href="/Users/TerryLee">HyperLink</a>

除此之外,在ASP.NET 4.0中还提供了两个表达式构造器,可以使用使用它们直接在ASPX页面中构造URL或者获取URL参数:

   1: <asp:HyperLink ID="HyperLink1" runat="server"
   2:     NavigateUrl="<%$RouteUrl:username=TerryLee%>">TerryLee</asp:HyperLink>

生成的URL与前面使用后台代码的方式一致,使用表达式获取RouteData,如下示例代码所示:

<asp:Literal ID="Literal1" runat="server" Text="<%$RouteValue:username%>"/>

当前评分 5.0 , 共有 2 人参与

  • Currently 5/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5

评论

添加评论


 

biuquote
  • 评论
  • 在线预览
Loading