一起谈.NET技术,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

目录
相关文章
|
3月前
|
前端开发 JavaScript C++
揭秘Web前端CSS引入秘籍:Link vs @import,你的选择决定页面加载速度,你选对了吗?
【8月更文挑战第26天】本文探讨了Web前端开发中CSS的引用方法,主要包括行内样式、内部样式表及外部样式表三种形式。重点对比了外部样式表中的`&lt;link&gt;`和`@import`两种引入方式。`&lt;link&gt;`作为HTML元素,在页面加载初期就开始加载样式资源,支持并行加载,对提高页面加载速度有益。而`@import`作为一种CSS规则,仅能在CSS文件中使用,其引入的样式表会在页面完成加载后才开始加载,可能导致渲染延迟且不支持并行加载。因此,在多数情况下,推荐采用`&lt;link&gt;`方式引入外部样式表,以确保更佳的性能表现和浏览器兼容性。
91 2
|
11天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
Python Web框架比较:Django vs Flask vs Pyramid
16 4
|
12天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第10天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django以功能全面、文档完善著称,适合快速开发;Flask轻量灵活,易于上手;Pyramid介于两者之间,兼顾灵活性和安全性。选择框架时需考虑项目需求和个人偏好。
23 1
|
17天前
|
安全 数据库 C++
Python Web框架比较:Django vs Flask vs Pyramid
【10月更文挑战第6天】本文比较了Python中三个最受欢迎的Web框架:Django、Flask和Pyramid。Django功能全面,适合快速开发;Flask灵活轻量,易于上手;Pyramid介于两者之间,兼顾灵活性和可扩展性。文章分析了各框架的优缺点,帮助开发者根据项目需求和个人偏好做出合适的选择。
23 4
|
2月前
|
开发框架 监控 前端开发
在 ASP.NET Core Web API 中使用操作筛选器统一处理通用操作
【9月更文挑战第27天】操作筛选器是ASP.NET Core MVC和Web API中的一种过滤器,可在操作方法执行前后运行代码,适用于日志记录、性能监控和验证等场景。通过实现`IActionFilter`接口的`OnActionExecuting`和`OnActionExecuted`方法,可以统一处理日志、验证及异常。创建并注册自定义筛选器类,能提升代码的可维护性和复用性。
|
2月前
|
开发框架 .NET 中间件
ASP.NET Core Web 开发浅谈
本文介绍ASP.NET Core,一个轻量级、开源的跨平台框架,专为构建高性能Web应用设计。通过简单步骤,你将学会创建首个Web应用。文章还深入探讨了路由配置、依赖注入及安全性配置等常见问题,并提供了实用示例代码以助于理解与避免错误,帮助开发者更好地掌握ASP.NET Core的核心概念。
74 3
|
2月前
|
开发框架 前端开发 .NET
VB.NET中如何利用ASP.NET进行Web开发
在VB.NET中利用ASP.NET进行Web开发是一个常见的做法,特别是在需要构建动态、交互式Web应用程序时。ASP.NET是一个由微软开发的开源Web应用程序框架,它允许开发者使用多种编程语言(包括VB.NET)来创建Web应用程序。
49 5
|
3月前
|
存储 安全 搜索推荐
【JavaWeb 秘籍】Cookie vs Session:揭秘 Web 会话管理的奥秘与实战指南!
【8月更文挑战第24天】本文以问答形式深入探讨了Web开发中关键的会话管理技术——Cookie与Session。首先解释了两者的基本概念及工作原理,随后对比分析了它们在存储位置、安全性及容量上的差异。接着,通过示例代码详细介绍了如何在JavaWeb环境中实现Cookie与Session的操作,包括创建与读取过程。最后,针对不同应用场景提供了选择使用Cookie或Session的指导建议,并提出了保障二者安全性的措施。阅读本文可帮助开发者更好地理解并应用这两种技术。
50 1
|
3月前
|
C# 开发者 Windows
WPF遇上Office:一场关于Word与Excel自动化操作的技术盛宴,从环境搭建到代码实战,看WPF如何玩转文档处理的那些事儿
【8月更文挑战第31天】Windows Presentation Foundation (WPF) 是 .NET Framework 的重要组件,以其强大的图形界面和灵活的数据绑定功能著称。本文通过具体示例代码,介绍如何在 WPF 应用中实现 Word 和 Excel 文档的自动化操作,包括文档的读取、编辑和保存等。首先创建 WPF 项目并设计用户界面,然后在 `MainWindow.xaml.cs` 中编写逻辑代码,利用 `Microsoft.Office.Interop` 命名空间实现 Office 文档的自动化处理。文章还提供了注意事项,帮助开发者避免常见问题。
190 0
|
3月前
|
Java Spring 数据库
怎样动动手指就能实现数据操作?Spring Data JPA背后的魔法揭秘
【8月更文挑战第31天】在Java开发中,数据库交互至关重要。传统的JDBC操作繁琐且难维护,而Spring Data JPA作为集成JPA的数据访问层解决方案,提供了CRUD等通用操作接口,显著减少代码量。通过继承`JpaRepository`,开发者能轻松实现数据的增删改查,甚至复杂查询和分页也不再困难。本文将通过示例详细介绍如何利用Spring Data JPA简化数据访问层的开发,提升代码质量和可维护性。
38 0