asp.net2.0 URL重写及urlMappings问题2

分类: asp.net技巧   出处:iocblog整理  更新时间:2009-02-11   添加到收藏  

  由于一旦进行了url重写,原先的webform中的action会发生改变,容易造成:请求的资源不存在问题
  
  具体怎么样?各位dx看看就清楚了!!!
  
  所有才有了这个responsefilter了,实现如下,
  
  public class responsefilter:system.io.stream
  {
   public responsefilter(system.io.stream sink,string _str)
   {
   _sink = sink;
   //
   // todo: 在此处添加构造函数逻辑
   //
   this.str = _str;
   }
   private string str = "";
   private system.io.stream _sink;
   private long _position;
   private system.text.encoding end=system.text.encoding.getencoding("gb18030");
   private system.text.stringbuilder ooutput = new system.text.stringbuilder();
   // the following members of stream must be overriden.
   public override bool canread
   {
   get { return true; }
   }
  
   public override bool canseek
   {
   get { return true; }
   }
  
   public override bool canwrite
   {
   get { return true; }
   }
  
   public override long length
   {
   get { return 0; }
   }
  
   public override long position
   {
   get { return _position; }
   set { _position = value; }
   }
  
   public override long seek(long offset, system.io.seekorigin direction)
   {
   return _sink.seek(offset, direction);
   }
  
   public override void setlength(long length)
   {
   _sink.setlength(length);
   }
  
   public override void close()
   {
   _sink.close();
   }
  
   public override void flush()
   {
   _sink.flush();
   }
  
   public override int read(byte[] buffer, int offset, int count)
   {
   return _sink.read(buffer, offset, count);
   }
  
   // the write method actually does the filtering.
   public override void write(byte[] buffer, int offset, int count)
   {
   string szbuffer = system.text.utf8encoding.utf8.getstring(buffer, offset, count);
   string ap="action="";
   int pos=-1;
   if ((pos=szbuffer.indexof(ap) )!= -1)
   {
   int epos = szbuffer.indexof(""", pos + ap.length+1);
   if (epos != -1)
   {
   szbuffer= szbuffer.remove(pos + ap.length, epos - pos - ap.length);
   }
  
   szbuffer = szbuffer.insert(pos + ap.length, this.str);
  
   byte[] data = system.text.utf8encoding.utf8.getbytes(szbuffer);
   _sink.write(data, 0, data.length);
  
   }
   else
   {
   ooutput.append(szbuffer);
   }
  
   //下面的这一段可以用来修改之间的内容;
   //regex oendfile = new regex("", regexoptions.ignorecase|regexoptions.compiled);
   //if (oendfile.ismatch(szbuffer))
   //{
   // //append the last buffer of data
   // //附加上缓冲区中的最后一部分数据
   // ooutput.append(szbuffer);
   // //get back the complete response for the client
   // //传回完整的客户端返回数据
   // string szcompletebuffer = ooutput.tostring().tolower();
   // int ipos = szcompletebuffer.indexof("",ipos+7);
   // string sp = szcompletebuffer.substring(ipos+7, epos - ipos );
   // szcompletebuffer = szcompletebuffer.remove(ipos+7,sp.length-7);
   // szcompletebuffer = szcompletebuffer.insert(ipos + 7, "dhz");
   // // szcompletebuffer = szcompletebuffer.replace(sp, "dhz");
   // //no match, so write out original data
   // //没有匹配,因此写入源代码
   // byte[] data = system.text.utf8encoding.utf8.getbytes(szcompletebuffer);
   // _sink.write(data, 0, data.length);
   //}
   //else
   //{
   // ooutput.append(szbuffer);
   //}
   }
  }
  
  //////而重候规则呢则是用xml文件配置如下;
  
  当然在web.config通过自定义配置节做也可以的
  
  
  
  
  
   ~/(d{4})/(d{2}).html
   ~/(d{4})/(d{2})/
   ~/(d{4})/(d{2})
   ~/(d{4})/(d{2})/index.html
  
   ~/pro.aspx?year=$1&month=$2
  
  
  
   ~/pc
   (www.iocblog.net 文章来源)
   ~/test2.aspx
  
  
  //这个规则写的不好,如第一个就可以用一个正则表达式来做。但是一时不知道怎么写好,好像要用到什么反捕获组的概念,正在思考这个东东!!
 (www.iocblog.net 文章来源)


Tag: URL重写



文章整理:iocblog
版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。