本系列文章导航

VS 2010 和 .NET 4.0 系列之《ASP.NET 4 中的SEO改进 》篇

VS 2010 和 .NET 4.0 系列之《干净的Web.Config文件 》篇

VS 2010 和 .NET 4.0 系列之《起始项目模板》篇

VS 2010 和 .NET 4.0 系列之《多定向支持》篇

VS 2010 和 .NET 4.0 系列之《多显示器支持》篇

VS 2010 和 .NET 4.0 系列之《代码优化的Web开发Profile》篇

VS 2010 和 .NET 4.0 系列之《ASP.NET, HTML, JavaScript 代码片段支持》篇

VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇

VS 2010 和 .NET 4.0 系列之《在ASP.NET 4 Web Forms中实现URL导向》篇

VS 2010 和 .NET 4.0 系列之《在VS 2010中查询和导航代码》篇

VS 2010 和 .NET 4.0 系列之《VS 2010代码智能提示的改进》篇

VS 2010 和 .NET 4.0 系列之《添加引用对话框的改进》篇

VS 2010 和 .NET 4.0 系列之《内置图表控件》篇

  这是我针对即将发布的VS 2010 和 .NET 4所撰写的 贴子系列的第八篇。今天的博客讨论ASP.NET 4中一个很酷的新运行时特性 - 对基于Web Forms的网页使用URL导向(routing)的功能。

  什么是URL导向(Routing)?

  URL导向是我们最先在ASP.NET 3.5 SP1中引入的功能,为ASP.NET MVC应用程序所用,以呈示干净的,SEO友好的“web 2.0” URLs。URL导向让你配置一个应用以接受并不映射到实际文件的请求URL,你可以使用导向来定义对用户来说在语义上有富有含义,有助于搜索引擎优化(SEO)的URL。

  例如,一个显示产品分类的传统网页的URL很可能是象下面这样的:

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

  使用ASP.NET 4中的URL导向引擎,你现在可以配置应用来接受下述URL来显示同样的信息:

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

  在ASP.NET 4.0中,象上面这样的URL现在既可映射到ASP.NET MVC控制器类,也可以映射到基于ASP.NET Web Forms的网页。

  使用ASP.NET MVC映射URL

  ASP.NET 3.5 SP1中引入的URL导向引擎提供了一个强有力的方式来处理进到服务器中来的URL。一般地,作为应用起始代码的一部分,你编写代码将匹配特定URL格式的URL注册/映射到代码处理器上。

  下面是一个例子,你如何可以使用目前的ASP.NET MVC将/products/softwareURL映射到拥有一个名叫“Browse”的action方法的名为“Products”的控制器类上:

  上面MapRoute()辅助方法的第一个参数,“products-browse”,是该路径的友好名称。第二个参数,“products/{category}”,则是匹配/products/software URL的URL过滤器,它会将URL的第二节当作一个名为“category”的参数值处理,然后这个参数会被传到ProductsController的Browse() action 方法中做处理。

  使用ASP.NET Web Forms映射URL

  除了映射到ASP.NET MVC控制器外,ASP.NET 4.0 现在还允许你使用URL导向引擎来将URL映射到ASP.NET Web Forms网页上。

  下面是一个例子,你如何可以使用ASP.NET 4.0中新的MapPageRoute()辅助方法来将 /products/software URL映射到处于应用根目录下的“Products.aspx”网页之上:

  MapPageRoute()辅助方法的前二个参数,与MapRoute()的一样。第一个参数提供了路径的友好名称,第二个参数指定了所匹配的URL格式。但第三个参数,指向Products.aspx网页来处理,而不是控制器类。你也可以对MapPageRoute()指定额外的参数,来利用象“路径约束”这样的特性和提供“默认参数值”,就象在基于ASP.NET MVC的路径注册中一样。

  然后在Products.aspx网页中,你可以编写象下面这样的代码,使用ASP.NET 4.0中新的Page.RouteData属性来获取通过/products/{category} URL 过滤器映射而来的“category”参数的值,然后将分类产品进行数据绑定来显示:

  除了使用象上面这样的代码、用编程的手法来获取传进来的路径参数外,你也可以在任何ASP.NET DataSource控件中,利用新的声明式<asp:routeparameter>控件,声明式地绑定来自路径的值。例如,在下面,我们使用了<asp:routeparameter> 语句,将SELECT语句的@category参数绑定到URL路径中/products/{category}参数:

  在ASP.NET Web Form中获取URL

  ASP.NET中的URL导向引擎既可以用来将进到服务器中来(incoming)的URL映射到代码处理器上,也可使用同样的映射注册逻辑,使用编程的手法生成输出到客户端(outgoing)的URL。

  例如,在上面,当我们映射 /products/{category} URL时,我们给了它一个友好的名称,叫“products-browse”。这还允许我们使用新的Page.GetRouteUrl()辅助方法,查询URL导向系统中的路径,或者,指定路径针对的参数,然后获取映射到路径的实际URL。例如,下面的代码将获取其值为“/products/software”的URL:

  你可以在你的后台代码文件中或你的 .aspx标识中使用上述辅助方法。

  现在还有一套Response.RedirectToRoute()方法,可以为你所用来将用户重新定向到一个路径(无论是MVC还是Web Forms),同时还可以传递参数。

  处理PostBack场景

  ASP.NET 4.0中的URL导向完全支持postback场景,<form runat=”server”> 控件会自动地输出导致页面显示的同个URL。例如,如果你用/products/software URL访问一个网页,其中的服务器端的<form runat=”server”>控件会输出一个<form action=”/products/software”> HTML元素到客户端,这意味着,网页上发生的任何postback场景都会保留原先的URL。

  这使得在Web Forms和 postback场景中支持干净的,SEO友好的URL容易之极,避免了今天大家在使用URL重写模块取得类似效果时需要采用的一些招术。

  结束语

  ASP.NET 4.0 方便了干净的,SEO友好的URL的实现, 既可通过ASP.NET MVC来实现,现在又可通过ASP.NET Web Forms来实现(你还可以有混合了两者的应用)。

  URL导向引擎使得注册任何形状或格式的URL,并将它们映射到任何你想要的处理器容易之极。因为URL导向引擎既可用于映射进来的URL,也可用于生成输出的URL,你可以在以后改变URL映射,而不必修改任何特定于网页或控制器的代码来反映这些变动,极大地方便了SEO优化的应用的建造。

  希望本文对你有所帮助,

  Scott

转载于:https://www.cnblogs.com/waw/archive/2011/08/29/2156982.html

艾伟_转载:VS 2010 和 .NET 4.0 系列之《在ASP.NET 4 Web Forms中实现URL导向》篇相关推荐

  1. 艾伟_转载:VS 2010 和 .NET 4.0 系列之《自动启动ASP.NET应用》篇

    本系列文章导航 VS 2010 和 .NET 4.0 系列之<ASP.NET 4 中的SEO改进 >篇 VS 2010 和 .NET 4.0 系列之<干净的Web.Config文件 ...

  2. 艾伟_转载:探索.Net中的委托

    废话 我本来以为委托很简单,本来只想简简单单的说说委托背后的东西,委托的使用方法.原本只想解释一下那句:委托是面向对象的.类型安全的函数指针.可没想到最后惹出一堆的事情来,越惹越多,罪过,罪过.本文后 ...

  3. 艾伟_转载:学习 ASP.NET MVC (第五回)理论篇

    本系列文章导航 学习 ASP.NET MVC (第一回)理论篇 学习 ASP.NET MVC (第二回)实战篇 学习 ASP.NET MVC (第三回)实战篇 学习 ASP.NET MVC (第四回) ...

  4. 艾伟_转载:.NET内存管理、垃圾回收

    1. Stack和Heap 每个线程对应一个stack,线程创建的时候CLR为其创建这个stack,stack主要作用是记录函数的执行情况.值类型变量(函数的参数.局部变量 等非成员变量)都分配在st ...

  5. 艾伟_转载:C# WinForm开发系列 - TextBox

    包含金额/日期输入框,带弹出数字面板的计算输入框,安全密码输入等控件(文章及相关代码搜集自网络,仅供参考学习,版权属于原作者! ). 1.CalculatorBox    CalculatorBox. ...

  6. 艾伟_转载:扩展方法 之 基本数据篇

    前一篇我列举了几个最常用到的基于Asp.Net的扩展方法,而这一篇基于基本数据的扩展方法理应不会逊一筹,因为它不局限于Asp.Net.何谓基本数据,这里直接摆定义: C# 中有两种基本数据类型:值类型 ...

  7. 艾伟_转载:C#语言基础常见问题汇总

    概述 1.什么是C#? C#是Microsoft公司设计的一种编程语言.它松散地基于C/C++,并且有很多方面和Java类似. Microsoft是这样描述C#的:"C#是从C和C++派生来 ...

  8. 艾伟_转载:.NET 4.0中数组的新增功能

    1.两数组是否"相等"? 在实际开发中,有时我们需要比对两个数组是否拥有一致的元素,例如,以下两个数组由于拥有相同的元素,因此被认为是相等的: int[] arr1 = new i ...

  9. 艾伟_转载:从ASP.NET的PHP执行速度比较谈起

    上星期我在InfoQ发表了一篇新闻,对Joe Stagner在博客上发表的三篇关于ASP.NET与PHP性能对比的文章进行了总结.写新闻其实挺不爽的,因为不能夹杂个人的看法,只能平铺直叙陈述事实.当然 ...

最新文章

  1. php调用另一个页面内容,php怎么实现调用另一个页面
  2. 干货 |“NLP”与“语言学家”的那些事儿
  3. Android首次启动时间长优化之预编译提取Odex
  4. Linux 内核抓包功能实现基础(五) 常见问题解析
  5. flex弹性布局操练2
  6. GitHub的基础使用入门
  7. 赞!图像生成PyTorch库火了,涵盖18+ SOTA GAN实现
  8. 如何在Eclipse中添加Servlet-api.jar的方法
  9. 树莓派+android things+实时音视频传输demo之遥控小车
  10. ListView的adapter中getView方法一直调用
  11. 解决办法:无法获得锁 /var/lib/dpkg/lock-frontend - open (11: 资源暂时不可用)
  12. 【pdf】Head First 设计模式(中文版)
  13. VS2013密钥(所有版本)
  14. 28 | Pika:如何基于SSD实现大容量Redis?
  15. 严正警告!!独处一室的人,请一定不要看文中介绍的URL,未成年也不能看![更新]
  16. 数据挖掘思维和实战06 数据建模:该如何选择一个适合我需求的算法?
  17. 腾讯地图标注_在腾讯地图上标注店铺,只需要简单几步就搞定
  18. Android 分区
  19. 再谈用Excel计算年龄
  20. 4.2 Photoshop图像处理

热门文章

  1. 河南朱砂服务器位置,探访河南境内规模最大的龙山遗址 龙山大墓主人头部疑似涂有朱砂...
  2. 经济危机,其实机会大于危险
  3. 检查企业71万余家(次),查处椎
  4. linux系统键盘被锁定,在Linux下锁住键盘和鼠标而不锁屏
  5. 免费全功能响应式模板:黑暗元素
  6. 狗的品种识别实战(tf2.0)
  7. (三)棋盘覆盖问题(思路)
  8. 1553B数据总线用终端电连接器-DK-6211
  9. 7. 内部集成电路总线接口I²C
  10. java unix 时间戳_「unix时间戳」Unix时间戳和Java中的时间戳的区别 - seo实验室