• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >ASP.NET > 一个完整的ASP.NET 2.0 URL重写方案[翻译]

一个完整的ASP.NET 2.0 URL重写方案[翻译]

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了asp url重写,asp获取当前url,asp url,url asp id,asp url编码等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

这篇文章描述了一个完整的 ASP.NET 2.0 URL 重写方案。这个方案使用正则表达式来定义重写规则并解决通过虚拟 URLs 访问页面产生回发事件的一些可能的困难。

为什么要重写 URL ?

将 URL 重写方法应用到你的 ASP.Net 应用程序的两个主要原因是:可用性和可维护性。

可用性

谁都知道,相对于难于辨认的带参数的长的查询路径,用户更喜欢一些短的、简洁的 URL。任何时候,一个容易记住和敲入的路径比添加到收藏夹更有用。其次,当一个浏览器的收藏夹不可用时,记住的地址总比在搜索引擎中输入关键字进行搜索,然后再查找要强的多。比较下面的两个地址:

 

(1)

http://www.somebloghost.com/Blogs/Posts.aspx?Year=2006&Month=12&Day=10

(2)

http://www. somebloghost.com/Blogs/2006/12/10/

 

第一个 URL 包含了查询字符串;第二个URL包含的信息可以让用户清楚的看到他看的东西,它还可以使用户更容易的修改地址栏的内容,如:http://www.somehost.com/Blogs/2006/12/.

可维护性

在很多WEB应用程序中,开发人员经常会将页面从一个目录移到另一个目录,让我们假设一开始有两个可用页面: http://www.somebloghost.com/Info/Copyright.aspx 和 http://www.somebloghost.com/Support/Contacts.aspx,但是后来开发者将 Copyright.aspx 和 Contacts.aspx 移到了 Help 目录,用户收藏起来地址就需要重新定位。这个问题虽然可以简单的用 Response.Redirect(new location) 来解决,但是如果有成百上千的页面呢?应用程序中就会包含大量的无效链接。

使用 URL 重写,允许用户只需修改配置文件,这种方法可以让开发者将web应用程序逻辑结构与物理结构独立开来。

ASP.NET 2.0 中的原有的URL 映射

ASP.NET 2.0 为 web 应用程序提供了一个开箱即用的映射静态 URL 的解决方案。这个方案不用编写代码就可以在 web.config 中将旧的 URLs 映射到新的地址。 要使用 URL 映射,只需在 web.config 文件的 system.web 节中创建一个新的 urlMappings 节 ,并添加要映射的地址 (“ ~/ ”指向应用程序的根目录):

<urlMappings enabled="true">

   <add url="~/Info/Copyright.aspx" mappedUrl="~/Help/Copyright.aspx" />

   <add url="~/Support/Contacts.aspx" mappedUrl="~/Help/Contacts.aspx" />

</urlMappings>

这样,如果用户输入 http://www.somebloghost.com/Support/Contacts.aspx, 它将看到 http://www.somebloghost.com/Help/Contacts.aspx , 而他并不知道那个页已经移除。

这个方案对于只有两个页面被移到其它位置的情况是足够的。但它对有一打的需要重定位的页或者需要创建一个整洁的URL来说,它是不合适的。另一个使用Asp.Net 的原有的URL映射技术的不太好的地方是:如果 Contacts.aspx 页包含的元素在回发到服务器时(这是非常可能的), 用户将会惊奇的发现地址 http://www.somebloghost.com/Support/Contacts.aspx 却变成了 http://www.somebloghost.com/Help/Contacts.aspx

。  这是因为ASP.NET 引擎用页面的实际地址修改了表单form 的 action 属性 ,所以表单就变成了下面的样子:

<form name="formTest" method="post"
action="http://www.simple-talk.com/Help/Contacts.aspx" id="formTest">

</form>

这样看来,URL 映射在ASP.NET 2.0 中几乎是无用的。我们应当能够使用一个映射规则来指定一系列相似的 URL。最好的解决方案就是使用正则表达式 ( Wikipedia 上可以查看概览,and 在 .NET 下的实现可以查看 MSDN), 但由于 ASP.NET 2.0 映射不支持正则表达式,所以我们需要开发一个内建到 URL 映射的不同的方案- URL 重写模块。 最好的方法就是创建一个可重用的、简单的配置模块来实现,显然我们应创建一个 HTTP 模块 (关于 HTTP 模块的详细信息请查看 MSDN 杂志) 并在独立的程序集中实现。要使这个程序集简单易用,我们应实现这个重写引擎的可配置性,即能够在 web.config 中指定规则。

 

 

在开发过程中,我们应能使这个重写模块打开或关闭 (比如你有一个较难捕获的bug,而它可能是由不正确的重写模块引起的)这样在 web.config 中对重写模块的配置节进行打开或关闭就成为一个选择。这样,在 web.config 中,一个配置节的示例如下:

<rewriteModule>

  <rewriteOn>true</rewriteOn>

  <rewriteRules>

      <rule source="(\d+)/(\d+)/(\d+)/"
         destination="Posts.aspx?Year=$1&Month=$2&Day=$3"/>

      <rule source="(.*)/Default.aspx"
         destination="Default.aspx?Folder=$1"/>

  </rewriteRules>

</rewriteModule>

这样,所有像: http://localhost/Web/2006/12/10/ 这样的请示,将会在内部将会用带参数的请求重定向到 Posts.aspx 。

请注意: web.config 是一个结构良好的 XML 文件, 它禁止在属性值中使用 & 符号,所以在例子中,应当使用 & 代替。

要在配置文件中使用这个重写模块,还需要注册节和指定处理模块,像下面这样增加一个configSections配置节:

 <configSections>

    <sectionGroup name="modulesSection">

      <section name="rewriteModule" type="RewriteModule.
RewriteModuleSectionHandler, RewriteModule"/>

    </sectionGroup>

  </configSections>

这样你就可以在 configSections 节的后面这样使用了:

<modulesSection>

    <rewriteModule>

      <rewriteOn>true</rewriteOn>

      <rewriteRules>

              <rule source="(\d+)/(\d+)/(\d+)/" destination="Post.aspx?Year=$1&Month=$2&Day=$3"/>

              <rule source="(.*)/Default.aspx" destination="Default.aspx?Folder=$1"/>

      </rewriteRules>

    </rewriteModule>

  </modulesSection>

另一个我们在开发重写模块过程中要做的就是还需要允许在虚拟路径中传递参数,象这样: http://www.somebloghost.com/2006/12/10/?Sort=Desc&SortBy=Date 。所以我们还需要有一个检测通过虚拟 URL 传递参数的解决方案。

 

 

接下来让我们来创建类库。首先,我们要引用 System.Web 程序集,这样我们可以实现一些基于 web 特殊功能。如果要使我们的模块能够访问 web.config,还需要引用 System.Configuration 程序集。

 

处理配置节

要能处理 web.config 中的配置,我们必需创建一个实现了 IConfigurationSectionHandler 接口的类 (详情查看 MSDN )。如下:

using System;

using System.Collections.Gener

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • Asp.Net URL重写的具体实现
  • ASP.NET中获取URL重写前的原始地址详解
  • asp.net url重写的好处与方法
  • URL重写及干掉ASP.NET试图状态的实现方法
  • asp.net URL重写简化版 速学URL重写
  • ASP.NET URL伪静态重写实现方法
  • 一个完整的ASP.NET 2.0 URL重写方案[翻译]
  • asp.net url重写后页面回传问题
  • asp.net url重写浅谈
  • asp.net下实现URL重写技术的代码

相关文章

  • 2017-05-11HttpRequest Get和Post调用其他页面的方法
  • 2017-05-11asp.net 上传图片并同时生成缩略图的代码
  • 2017-05-11.NET实现Repeater控件+AspNetPager控件分页
  • 2018-08-20Visual Studio 2017 15.5 正式发布!性能再提升
  • 2017-05-11.NET验证组件Fluent Validation使用指南
  • 2017-05-11asp.net 动态生成表格
  • 2017-05-11asp.net 设置GridView的选中行
  • 2017-05-11.NET Core Windows环境安装配置教程
  • 2017-05-11详解ABP框架的参数有效性验证和权限验证
  • 2017-05-11详解ASP.NET-----Repeater数据控件的用法总结

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • vs2010根据字符串内容添加断点的方法介绍
    • asp.net各种cookie代码和解析实例
    • 使CheckBoxList的Attributes属性生效(修改微软的一个bug)
    • 几个ASP.NET技巧
    • 解析GridView自带分页及与DropDownList结合使用
    • asp.net(c#)下各种进制间的轻松转换(2进制、8进制、10进制、16进制)
    • ASP.NET上传图片并生成可带版权信息的缩略图
    • asp.net下xml当作导航数据源实现动态权限
    • asp.net 退出登陆(解决退出后点击浏览器后退问题仍然可回到页面问题)
    • .NET WinFrom中给文本框添加拖放事件的代码

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有