ASP编程 PHP编程 JSP编程 NET编程 CGI编程 XML编程 
Google adsense申请技巧本站核心代理域名注册主机业务 快速发布你的买卖域名买卖网站信息 1元注册 cn域名
站长每日新闻导读 √ ·推荐万网空间¥120元 150m 站长网:站长必上的网站网站联盟大全本站代理万网域名55空间120元
 2007-7-6 10:55:59

asp.net 2.0中的URL重写以及urlMappings问题

来源: 字体:[ ]

由于一旦进行了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); 

   } 
   //下面的这一段可以用来修改<Head></head>之间的内容; 

   //Regex oEndFile = new Regex("</head>", 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("<title>"); 
   // int epos = szCompleteBuffer.IndexOf("</title>",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通过自定义配置节做也可以的 
   
  <?xml version="1.0" encoding="utf-8" ?> 
  <Rules> 
   <RewriterRule> 
   <LookFors> 
   <LookFor>~/(\d{4})/(\d{2})\.html</LookFor> 
   <LookFor>~/(\d{4})/(\d{2})/</LookFor> 
   <LookFor>~/(\d{4})/(\d{2})</LookFor> 
   <LookFor>~/(\d{4})/(\d{2})/index.html</LookFor> 
   </LookFors> 
   <SendTo>~/Pro.aspx?year=$1&month=$2</SendTo> 

  </RewriterRule> 

   <RewriterRule> 

   <LookFors> 

   <LookFor>~/pc</LookFor> 
   </LookFors> 
   <SendTo>~/Test2.aspx</SendTo> 
   </RewriterRule> 
  </Rules> 
  //这个规则写的不好,如第一个就可以用一个正则表达式来做。但是一时不知道怎么写好,好像要用到什么反捕获组的概念,正在思考这个东东!!

 

网站地图 - 域名注册续费虚拟主机代理 - 交易论坛 - 网站投稿 - 广告服务 - 帮助中心 - 联系我们
Copyright ©2003-2007 www.Admin5.com All Rights Reserved