当前位置: 首页 > 图文教程 > 网络编程 > ASP.NET > asp.net URL重写(URLRewriter) 简化版

ASP.NET
asp.net GridView控件中模板列CheckBox全选、反选、取消
asp.net GridView 删除时弹出确认对话框(包括内容提示)
asp.net DropDownList 三级联动下拉菜单实现代码
asp DataTable添加列和行的三种方法
Asp.net 页面调用javascript变量的值
asp.net 长文章通过设定的行数分页
asp.net 定时间点执行任务的简易解决办法
asp.net 页面延时五秒,跳转到另外的页面
asp.net 动态输出透明gif图片
asp.net DataList与Repeater用法区别
asp.net Javascript获取CheckBoxList的value
asp.net程序在调式和发布之间图片路径问题的解决方法
asp.net下生成英文字符数字验证码的代码
asp.net 页面版文本框智能提示JSCode (升级版)
ASP.NET URL伪静态重写实现方法
ASP.NET 2.0 中Forms安全认证
asp.net 动态添加多个用户控件
asp.net Repeater显示父子表数据,无闪烁
asp.net 无法获取的内部内容,因为该内容不是文本 的解决方法
asp.net GridView排序简单实现

ASP.NET 中的 asp.net URL重写(URLRewriter) 简化版


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-08-14   浏览: 53 ::
收藏到网摘: n/a

  在 asp.net 里实现 URL重写(URLRewriter)的一个最简单的方法。

  参考了 (作者 Scott Mitchell 翻译:Janssen )的大作,虽然没有完全看明白,但是也照猫画虎地做了一个,颇有“成就”感。写出来分享一下。

  原作里讲了很多的原理,这里就不说了(其实我也不懂)。这里就写操作过程吧。目的是实现一个最简单的能实现 URL重写 的程序。

  1、需要设置一下IIS里的站点属性。

  2、修改web.config的内容。

   <system.web>
   <httpHandlers>
   <add verb="*" path="*.zhtml" type="ZDIL.URLRewriter.RewriterFactoryHandler, ZDILURLRewriter" />
  </httpHandlers>
  </system.web>

  其中*.zhtml 就是地址栏里面写的网页的扩展名,就是给用户看的,这个可以随意改(但是要符合扩展名的规则!)。当然要和第一步里面的设置相一致才行。

  3、写一个类。

  using System;
  using System.IO;
  using System.Web;
  using System.Web.UI;

  namespace ZDIL.URLRewriter
  {
   /**//// <summary>
   /// URL重写
  /// </summary>
   public class RewriterFactoryHandler : IHttpHandlerFactory
    {
    /**//// <summary>
   /// GetHandler is executed by the ASP.NET pipeline after the associated HttpModules have run.  The job of
        /// GetHandler is to return an instance of an HttpHandler that can process the page.
        /// </summary>
        /// <param name="context">The HttpContext for this request.</param>
        /// <param name="requestType">The HTTP data transfer method (<b>GET</b> or <b>POST</b>)</param>
        /// <param name="url">The RawUrl of the requested resource.</param>
        /// <param name="pathTranslated">The physical path to the requested resource.</param>
        /// <returns>An instance that implements IHttpHandler; specifically, an HttpHandler instance returned
        /// by the <b>PageParser</b> class, which is the same class that the default ASP.NET PageHandlerFactory delegates
        /// to.</returns>
        public virtual IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)
        {
            string sendToUrl = url;                         //地址栏里面的地址
            string filePath = pathTranslated;

            string sendToURLString = "/web/index.aspx";  //真正要访问的页面
            string queryString = "";                     //参数。比如 ?id=123

            filePath = context.Server.MapPath(sendToURLString); //物理地址

            //这句最重要了。转向了。
            context.RewritePath(sendToURLString, String.Empty, queryString);
           
            //这个还没有弄明白 :)
            return PageParser.GetCompiledPageInstance(url, filePath, context);
        }

        public virtual void ReleaseHandler(IHttpHandler handler)
        { //这个也不懂了
        }
    }
}
 

  这个类呢,要写在一个单独的项目里面,然后编译成 ZDILURLRewriter.DLL文件。(注意文件名,写错了就不能正常运行了)。

  4、完成了。

  打开IE ,在地址栏里输入 http://.../1.zhtml。

  浏览者看到是一个静态页的地址,但是实际上访问的却是 /web/index.aspx 这个动态网页。

  怎么样简单吧。

  当然了,这个是最简单的,简单到了“不能用”的地步了。因为他会把所有的 *.zhtml 的访问都“重写”到 /web/index.aspx 。

  至于把什么样的网页重写到哪个网页,这里就不介绍了(这里只讲方法,不讲实现的细节)。

  方法很多了,原作是通过正则来匹配的,我是通过 string sendToUrl = url; 来判断的。

  其他的就看你们的需要了。

  http://blog.csdn.net/shixin1198/archive/2006/10/16/1336846.aspx