• 在ASP.NET中实现简单的URL重写


        最近用ASP.NET写一个小网站程序,需要实现URL重写。在ASP.NET中实现URL重写算是一个古老的话题了,在微软的MSDN中也有文章专门讨论这个问题,文章地址为:
    http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx,在微软的解决方法中,开发人员需要自己编程实现HTTP模块和HTTP处理程序,此外还要修改配置文件,虽然不复杂,但也要写一些代码。我是一个喜欢偷懒的程序员,而且对ASP.NET编程不很熟悉,网站又小,因此我想出了一个简单方法来实现URL重写。
        首先看看URL重写的目的,URL重写的最终目标就是把难懂的充满"&?"符号的带参数的URL地址改变成自然的易于人类理解的结构简单的URL地址。可以认为所有能达到这种结果的手段就是URL重写。
        比如一个页面地址“http://server/customers.aspx?region=地区名称” ,它显示的是指定地区的客户列表,用户直接输入 "http://server/customers/地区名称"的样式,则经过URL重写,它转换为 "http://server/customers.aspx?region=地区名称",例如客户端为 "http://server/customers/东北.aspx",服务器端最终执行的是"customers.aspx?region=东北",URL重写使得WEB应用程序的URL人性化,提高程序的用户可用性。
        但符号"/"是一个特殊字符,可以解释为操作系统目录分隔符,URL重写时可能需要对此有所判断,我不想判断,于是没有"/"符号,而采用其他的重写方式,比如用户输入"http://server/东北客户.aspx",则重写为"customers.aspx?region=东北",这样重写方式简单,程序判断起来也容易。不需要编程实现HTTP模块,无需修改配置文件,实现了customers.aspx 后,只要在 Global.asax 中添加以下代码

    protected void Application_BeginRequest(Object sender, EventArgs e)
    {
        
    string name = base.Request.FilePath ;
        
    if( name != null )
        {
            
    int index = name.LastIndexOf('/');
            
    if( index >= 0 )
                name 
    = name.Substring( index + 1 );
            index 
    = name.LastIndexOf('\\');
            
    if( index >= 0 )
                name 
    = name.Substring( index + 1 );
            index 
    = name.LastIndexOf('.');
            
    if( index >= 0 )
                name 
    = name.Substring( 0 , index );
            name 
    = name.Trim() ;
            
    // 此处 name 就是请求地址的简单名称
            if( name.EndsWith("客户"))
            {
                name 
    = name.Substring( 0 , name.Length - 2 );
                
    base.Context.RewritePath( "customers.aspx?region=" + System.Web.HttpUtility.UrlEncode( name ) );
                
    // 若使用 Response.Redirect 则会导致客户的IE地址栏输入的地址突变
                
    //base.Context.RewritePath( "customers.aspx?region=" + name , true );
            }
        }
    }

    这种方法只使用了几十行代码就实现了简单的URL重写,无需实现各种接口,无需修改配置文件,实在是方便,我的懒惰的欲望得到了满足。

    不过这是一种简单的URL重写方法,只能处理简单的问题,若需要实现复杂的URL重写,则还是推荐大家看看微软提出的URL重写方案。

    在此提供一个实现简单URL重写的ASP.NET演示程序下载(/Files/xdesigner/URLRewriteDemo.rar) 。这个演示程序需要注意,对于ASP.NET,若URL参数中包含中文则可能出现问题,需要修改web.config 中的 globalization 元素的 requestEncoding 属性值为 "gb2312" ,但若使用URL重写则不存在这种问题。

    袁永福(http://www.xdesigner.cn) 2007-3-28

  • 相关阅读:
    堆排序
    2019晋城一中开放日
    严格次小生成树
    遥远的国度
    noip2018游记
    Luogu1736 创意吃鱼法
    P3958 奶酪
    Luogu3385 负环
    Luogu1040 加分二叉树
    Luogu1007 独木桥
  • 原文地址:https://www.cnblogs.com/xdesigner/p/691497.html
Copyright © 2020-2023  润新知