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

简介: 本系列文章导航VS 2010 和 .NET 4.0 系列之《ASP.NET 4 中的SEO改进 》篇VS 2010 和 .NET 4.0 系列之《干净的Web.Config文件 》篇VS 2010 和 .

本系列文章导航

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

目录
相关文章
|
2月前
|
存储 开发框架 NoSQL
ASP.NET WEB——项目中Cookie与Session的用法
ASP.NET WEB——项目中Cookie与Session的用法
36 0
|
2月前
|
开发框架 前端开发 .NET
ASP.NET WEB——项目创建与文件上传操作
ASP.NET WEB——项目创建与文件上传操作
46 0
|
16天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【4月更文挑战第9天】本文对比了Python三大Web框架Django、Flask和Pyramid。Django功能全面,适合快速开发,但学习曲线较陡;Flask轻量灵活,易于入门,但默认配置简单,需自行添加功能;Pyramid兼顾灵活性和可扩展性,适合不同规模项目,但社区及资源相对较少。选择框架应考虑项目需求和开发者偏好。
|
1月前
|
开发框架 前端开发 .NET
进入ASP .net mvc的世界
进入ASP .net mvc的世界
29 0
|
1月前
|
开发框架 中间件 .NET
C# .NET面试系列七:ASP.NET Core
## 第一部分:ASP.NET Core #### 1. 如何在 controller 中注入 service? 在.NET中,在ASP.NET Core应用程序中的Controller中注入服务通常使用<u>依赖注入(Dependency Injection)</u>来实现。以下是一些步骤,说明如何在Controller中注入服务: 1、创建服务 首先,确保你已经在应用程序中注册了服务。这通常在Startup.cs文件的ConfigureServices方法中完成。例如: ```c# services.AddScoped<IMyService, MyService>(); //
63 0
|
1月前
|
开发框架 前端开发 .NET
C# .NET面试系列六:ASP.NET MVC
<h2>ASP.NET MVC #### 1. MVC 中的 TempData\ViewBag\ViewData 区别? 在ASP.NET MVC中,TempData、ViewBag 和 ViewData 都是用于在控制器和视图之间传递数据的机制,但它们有一些区别。 <b>TempData:</b> 1、生命周期 ```c# TempData 的生命周期是短暂的,数据只在当前请求和下一次请求之间有效。一旦数据被读取,它就会被标记为已读,下一次请求时就会被清除。 ``` 2、用途 ```c# 主要用于在两个动作之间传递数据,例如在一个动作中设置 TempData,然后在重定向到另
99 5
|
1月前
|
存储 PHP 数据库
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
使用Net2FTP轻松打造免费的Web文件管理器并公网远程访问
|
2月前
|
SQL 开发框架 .NET
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
ASP.NET WEB+EntityFramework数据持久化——考核练习库——1、用户管理系统(考点:查询列表、增加、删除)
67 0
|
2月前
|
SQL 开发框架 前端开发
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
ASP.NET WEB项目中GridView与Repeater数据绑定控件的用法
34 0
|
2月前
|
SQL 开发框架 .NET
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
ASP.NET Web——GridView完整增删改查示例(全篇幅包含sql脚本)大二结业考试必备技能
33 0