Net 4.0的UrlRouting实现友好的URL

在.Net 4.0之前我们为了做出搜索引擎友好的,对用户也友好的url都是需要自己实现Url重写,现在不需要了,.Net 4.0为我们做这一切。UrlRouting之所以称之为Routing是因为它不但实现了Url重写还可以通过参数得到重写后的Url在页面上使用。

1. Url Routing 的通常用法

UrlRouting在Asp.Net Mvc项目中被广泛使用,在Mvc中很好用,所以移植到了webform中,我们先看下在webform中的使用方式

假定一个使用场景:我们需要做博客每日文章的页面,我们希望的url地址是:/archive/2010/05/10/default.aspx

这个地址将被映射到~/posts.aspx文件上

要使用UrlRouting,需要将UrlRouting的规则注册到RouteTable中,如下Global文件中注册Routing规则的代码


以下为引用的内容:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.Ignore("{resource}.axd/{*pathInfo}");

    routes.MapPageRoute("blogs", //给这个UrlRouting规则起一个名字
        "archive/{year}/{month}/{date}/default.aspx", //希望的友好Url地址格式
        "~/blogs.aspx", //映射到的aspx页面路径
        false, //是否需要检查用户权限
        new RouteValueDictionary{ { "year", DateTime.Now.Year },
            { "month", DateTime.Now.Month },
            {"date", DateTime.Now.Date}
        },//参数的默认值
        new RouteValueDictionary {
            {"year",@"(1920)\d{2}"},
            {"month",@"\d{1,2}"},
            {"date",@"\d{1,2}"}
        } //参数的规则,我们在这里限制url中的年月日是我们想要的数据格式
        );

}

void Application_Start(object sender, EventArgs e)
{
    //在Application_Start时注册的Routing规则
    RegisterRoutes(RouteTable.Routes);
}

2. 在页面中使用UrlRouting参数值

1) 在后台代码中使用Route的值


以下为引用的内容:

protected void Page_Load(object sender, EventArgs e)
{
    string year = (string)RouteData.Values["year"];
    string month = (string)RouteData.Values["month"];
    string date = (string)RouteData.Values["date"];
}

2) 在页面上使用


以下为引用的内容:

<asp:Literal ID="literalYear" runat="server" Text="<%$RouteValue:year %>"></asp:Literal>
    -<asp:Literal ID="literal1" runat="server" Text="<%$RouteValue:month %>"></asp:Literal>
    -<asp:Literal ID="literal2" runat="server" Text="<%$RouteValue:date %>"></asp:Literal>

3) 在DataSource中使用RouteParameter


以下为引用的内容:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:TestDb %>"
    SelectCommand="SELECT BlogID,BlogTitle FROM Blogs Where Category = @category">
    <SelectParameters>
        <asp:RouteParameter Name="category" RouteKey="category" />
    </SelectParameters>
</asp:SqlDataSource>

4) 在页面上显示RouteUrl


以下为引用的内容:

<a href='<%=GetRouteUrl("blogs",new {year=2010,month=05,date=05}) %>'>2010年5月1日的博客</a>

3. UrlRouting和UrlRewrite的区别

UrlRouting相对于Url重写是一个比较新的事物,UrlRouting的长处是可以做双向转换,既可以做url重写,还可以根据一些参数获得重写后的Url地址,但是它也有自己的不足之处,比如说如果你想连域名一起重写,比如博客地址yukaizhao.cnblogs.com这样的重写,UrlRouting就做不到了,只能用UrlRewrite。

原文地址:http://www.cnblogs.com/yukaizhao/archive/2010/05/20/urlrouting_asp_net_40.html

时间: 2024-08-22 19:11:29

Net 4.0的UrlRouting实现友好的URL的相关文章

IIS7上部署Asp.Net4.0时UrlRouting的若干问题

今天把公司的一个小web项目从Asp.Net3.5升级到Asp.Net4.0,结果在UrlRouting上遇到一系列很纠结的问题.(注:Url路由是Asp.Net4.0新增的一项功能,初次接触的朋友请移步这里Asp.Net4.0/VS2010新变化(3):webform中也可以直接url路由)   vs2010开发环境中一切运行正常,结果部署到IIS7上以后,首先遇到下面这个问题: 我确定服务器上的asp.net4.0 已经启用了(如下图),对应的网站应用程序池也切换到了4.0,但还是这样! 到

SEO实践(4)——SEO友好的URL结构

该系列的之前两篇文章已经把几乎所有SEO的思想都涵盖了,如一开始说的那样,SEO无非是去对搜索引擎友好.或是对搜索引擎的用户友好,不可能有再多的了.接下来就会陆陆续续提一些更细节的东西.因为在群博的公开环境下能够分享的内容有限,所以会偏向一些和SEO效果未必有直接关系,但也应该被SEO所注重的技术层面方面的内容. 对于SEO而言,良好的URL结构是什么样的?和前面的文章一样,让我们来看下SEO顶尖网站Amazon的做法,这是它的一个产品页: http://www.amazon.com/Zune-

magento 1.4.1.0 -- 新版本小改进之产品url重定向

从1.4.0.1升级到1.4.1.0后在后台发现一个对SEO有利的小改进,打开后台产品管理,选择一个产品点击进入,在url属性后可以看到这样一个复选框   默认是不可用状态,只要你一修改url的值,这个框就会变可用,你可以选择是否选中,选中的话就会在新老URL之间生成重定向,而且从字面理解生成的应该是301永久重定向.

在ASP.NET 2.0中建立站点导航层次(5)

URL映射 URL映射特性利用web.config中存储的配置信息把收到的请求重映射(remap)到不同的URL.重映射发生在对请求的所有其它处理操作之前.下面的例子演示的是重映射一个页面请求,实际上任意文件类型都可以把请求重映射到不同的URL. 定义重映射URL URL映射的配置信息存储在web.config中.元素中嵌套的每个元素为重映射进入站点的(inbound)url定义了一条规则.url属性定义了进入站点的url的exact(原样)属性,URL映射特性会试图用它进行匹配操作.如果exa

技巧:在ASP.NET 2.0中建立站点导航层次

asp.net|导航|技巧|站点 站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你也可以通过编写自定义的提供程序,从任何后端位置暴露这些信息. 站点导航API--站点导航API用于在应用程序的代码中访问站点导航信息,它摘录了导航信息存储的细节.你可以使用API来编程访问应用程序的导航节点. 导航控件--导航控件为页面之间的导航提供了通用的UI,例

在ASP.NET 2.0中建立站点导航层次

asp.net|站点 站点导航提供程序--ASP.NET 2.0中的站点导航提供程序暴露了应用程序中的页面的导航信息,它允许你单独地定义站点的结构,而不用考虑页面的实际物理布局.默认的站点导航提供程序是基于XML的,但是你也可以通过编写自定义的提供程序,从任何后端位置暴露这些信息. 站点导航API--站点导航API用于在应用程序的代码中访问站点导航信息,它摘录了导航信息存储的细节.你可以使用API来编程访问应用程序的导航节点. 导航控件--导航控件为页面之间的导航提供了通用的UI,例如树视图.菜

asp.net 2.0中的url映射

asp.net 介绍 url映射是asp.net 2.0的一个新的特性,它可以让开发人员把一个页映射到另一个url上.如果一个url请求过来,程序会自动把它重新映射到服务端.例如,如果你在程序中配置了把~/Beverages.aspx映射到了~/ProductsByCategory.aspx?CategoryID=1&CategoryName=Beverages,那么当用户在浏览器中输入了http://YourSite.com/Beverages.aspx,服务器会接收后会自动的转到http:/

IIS 7.0: 使用集成的ASP.NET管道增强应用程序

本文以 IIS 7.0 FastCGI 组件的预发布版为基础.文中包含的所有信息均有可能变更. 本文 讨论: ASP.NET 集成模式 添加用户身份验证 启用对搜索引擎友好的 URL 使 用输出缓存提升性能 本文使用了以下技术:IIS 7.0, .NET Framework 大约一年前,我撰写了 一篇 IIS 7.0 概述,发表在<MSDN 杂志>上(请参阅 msdn.microsoft.com/msdnmag/issues/07/03/IIS7 上的"IIS 7.0:探索用于 Wi

ASP.NET Web Forms 4.0中双向Routing支持

.NET Framework 3.5 SP1已经包含了ASP.NET Routing引擎.现在微软已经在ASP.NET WebForms 4.0中 增加了对Routing引擎更好的支持,它使用表达式构造器进行双向Routing. Channel 9刚发布了一个10-4的新视频,展示如何在ASP.NET 4.0中使用这个新功能. 下面是视频中展示的一段代码.他们使用了一个经典示例,展示如何将Product.aspx? category=Jerseys映射至Product/Jerseys.在使用AS