URL重写之实现IHttpHandler接口 .Net 1.1实现

 在幻想曲的帮助下,在这个接口基础上,我改了少少,用asp.net 1.1版实现,与大家分享
代码如下:

1.新建工程SofteerStudio,代码如下:

using  System; 
using  System.IO; 
using  System.Data; 
using  System.Configuration; 
using  System.Collections;
using  System.Web; 
using  System.Web.Security; 
using  System.Web.UI; 
using  System.Web.UI.WebControls; 
using  System.Web.UI.HtmlControls; 
using  System.Text; 
using  System.Text.RegularExpressions; 
using  Microsoft.VisualBasic; 

namespace  SofteerStudio
{

    
//RegexInfo结构,用来存储从xml文件中读取到的数据 
    public struct RegexInfo 
    

        
public string _before; 
        
public string _after; 
        
public RegexInfo(string before, string after) 
        

            _before 
= before.ToLower(); 
            _after 
= after.ToLower(); 
        }
 
    }
 
    
//ipFilter结构,用来存储被封的IP 
    public struct ipFilter 
    

        
public string _ip; 
        
public ipFilter(string ip) 
        

            _ip 
= ip; 
        }
 
    }
 


    
/// 
    
/// HtmlHttpHandler 的摘要说明。
    
/// 

    public class HtmlHttpHandler: IHttpHandler
    
{
        
        
private IList _regex_list=new ArrayList() ; 
        
private IList _ip_filter=new ArrayList(); 

        
public HtmlHttpHandler() 
        

            DataSet ds 
= new DataSet(); 
            
//读取url重写规则文件,并写入RegexInfo结构的实例中 
            ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/XMLConfig/Config/Regexs.xml")); 

            
foreach (DataRow r in ds.Tables["regex"].Rows) 
                
                _regex_list.Add(
new RegexInfo(((string)r["b"]).Trim(), ((string)r["a"]).Trim())); 
            ds.Reset(); 
            
//读取被封的IP列表 
            ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/XMLConfig/Config/ipFilter.xml")); 
            
foreach(DataRow r in ds.Tables["IpFilters"].Rows) 
                _ip_filter.Add(
new ipFilter((string)r["ip"])); 
        }
 

        
public void ProcessRequest(HttpContext context) 
        

            
string _ip = context.Request.UserHostAddress;   //获取IP 
            foreach (ipFilter r in _ip_filter) 
            

                
if (_ip == r._ip) 
                

                    context.Response.Write(
"对不起,您的IP:"+_ip+"已被限制!"); 
                    context.Response.End(); 
                }
 
            }
 
            
string path = context.Request.Path.ToLower();   //获取当前访问的重写过的虚假URL 
            foreach (RegexInfo r in _regex_list) 
                path 
= Regex.Replace(path, r._before, r._after);      //匹配出其真实的URL 
            context.Server.Execute(path);  
        }
 

        
// Override the IsReusable property. 
        public bool IsReusable 
        

            
get return true; } 
        }
 
    }

}

 


2.编译成dll,引用它至你的项目中.

3.更改你的项目web.config

  < httpHandlers >  
      
< add verb = " * "  path = " *.html "  type = " SofteerStudio.HtmlHttpHandler,SofteerStudio " />  
 
httpHandlers >  

 

 

欢迎与大家交流,我的gmail是softeer#gmail.com

 

附:xml文件的格式:

 

xml version="1.0" encoding="utf-8"  ?>  
< root >  
< regex >  
                
 
< b > xxx,(?[0-9]+).html$ ]]> b >  
 
                
< a > xxx.aspx?id=${id} ]]> a >          
regex >  
root >  

你可能感兴趣的:(URL重写之实现IHttpHandler接口 .Net 1.1实现)