控件中国网现已改版,您看到的是老版本网站的镜像,系统正在为您跳转到新网站首页,请稍候.......
中国最专业的商业控件资讯网产品咨询电话:023-67870900 023-67871946
产品咨询EMAIL:SALES@COMPONENTCN.COM

ASP.NET中的URLRewrite

作者:佚名 出处:互联网 2010年07月19日 阅读:

ASP.NET中的URLRewrite
 
一、URL Rewrite
URL Rewrite是截取传入Web 请求并自动将请求重定向到其他URL的过程。

比如浏览器发来请求hostname/101.aspx ,服务器自动将这个请求中定向为http://hostname/list.aspx?id=101

URL Rewrite的优点在于:

1. 缩短URL,隐藏实际路径提高安全性
2. 易于用户记忆和键入
3. 易于被搜索引擎收录

有很多种手段实现URL Rewrite,我选择了我认为最好的一种。这种方法的优点在于,不需要更改任何与IIS有关的设定,而且在中等信任安全等级的虚拟主机中,也可以使用。

二、实现细节
1. 准备URLRewrite.NET的类库,将网站引用这个类库;

2. 将configSections加入到configuration的第一节:

<configSections>    <section name="rewriter"             requirePermission="false"             type="Intelligencia.UrlRewriter.Configuration.RewriterConfigurationSectionHandler, Intelligencia.UrlRewriter" /></configSections>
3. 将对httpModule的处理加入到system.web中:

<httpModules>    <add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter" /></httpModules>
4. 在configuration中,加入对rewrite的设定:

<rewriter>    <rewrite url="~/Articles/(\d+)" to="~/Articles/Detail.aspx?id=$1" />    <rewrite url="~/Categories/(\d+)" to="~/Articles/List.aspx?id=$1" />    <rewrite url="~/Categories/(\d+)_(\d+)" to="~/Articles/List.aspx?id=$1&amp;page=$2" /></rewriter>
需要注意的是,当使用多个参数时,需要使用HTML转义字符来代替&符号。

三、IIS配置
在IIS 7中,URLRewriter.NET可以不经配置正常使用,但是在IIS 6中,需要进行一些配置,详见以下链接。

http://urlrewriter.net/index.php/support/installation/windows-server-2003

四、ASP.NET的Postback设定
由于在使用了UrlRewriter后,ASP.NET中的Postback机制导致页面发生回送后,会在浏览器中使用其原始链接,容易使用户发生困惑,也不利于搜索引擎的检索,故需要加以处理。

在ASP.NET 2.0后,我们可以通过使用控件适配器的扩展框架来定制重写<form>的action属性,而不需要对页面代码做出任何改动。

1. 在App_Code中,加入FormRewriter.cs文件:

using System.Web;using System.Web.UI; public class FormRewriterControlAdapter : System.Web.UI.Adapters.ControlAdapter{    protected override void Render(HtmlTextWriter writer)    {        base.Render(new RewriteFormHtmlTextWriter(writer));    }}public class RewriteFormHtmlTextWriter : HtmlTextWriter{    public RewriteFormHtmlTextWriter(HtmlTextWriter writer)        : base(writer)    {        InnerWriter = writer.InnerWriter;    }    public RewriteFormHtmlTextWriter(System.IO.TextWriter writer)        : base(writer)    {        InnerWriter = writer;    }    public override void WriteAttribute(string name, string value, bool fEncode)    {        if ((name == "action"))        {            HttpContext Context = HttpContext.Current;            if (Context.Items["ActionAlreadyWritten"] == null)            { value = Context.Request.RawUrl; Context.Items["ActionAlreadyWritten"] = true;            }        }        base.WriteAttribute(name, value, fEncode);    }}
2. 在App_Browsers中,加入Form.browser文件:

<browsers>    <browser refID="Default">        <controlAdapters>            <adapter controlType="System.Web.UI.HtmlControls.HtmlForm" adapterType="FormRewriterControlAdapter" />        </controlAdapters>    </browser></browsers>
这样处理后,就可以保证页面在发生Postback后,仍然使用原来的URL作为链接。

热推产品

  • ActiveReport... 强大的.NET报表设计、浏览、打印、转换控件,可以同时用于WindowsForms谀坔攀戀Forms平台下......
  • AnyChart AnyChart使你可以创建出绚丽的交互式的Flash和HTML5的图表和仪表控件。可以用于仪表盘的创......
首页 | 新闻中心 | 产品中心 | 技术文档 | 友情连接 | 关于磐岩 | 技术支持中心 | 联系我们 | 帮助中心 Copyright-2006 ComponentCN.com all rights reserved.重庆磐岩科技有限公司(控件中国网) 版权所有 电话:023 - 67870900 传真:023 - 67870270 产品咨询:sales@componentcn.com 渝ICP备12000264号 法律顾问:元炳律师事务所 重庆市江北区塔坪36号维丰创意绿苑A座28-5 邮编:400020
在线客服
在线客服系统
在线客服
在线客服系统