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; 
        }
 
    }
 


    
/// <summary>
    
/// HtmlHttpHandler 的摘要说明。
    
/// </summary>

    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><![CDATA[xxx,(?<id>[0-9]+).html$]]></b> 
<!--实际地址--> 
                
<a><![CDATA[xxx.aspx?id=${id}]]></a>         
</regex> 
</root> 
发布了46 篇原创文章 · 获赞 1 · 访问量 11万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章