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

本文介绍了一个使用ASP.NET 1.1实现的URL重写和IP过滤方案。通过自定义HTTP处理器,该方案能够根据配置文件中的规则重定向URL,并检查访问者的IP是否在黑名单中。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 在幻想曲的帮助下,在这个接口基础上,我改了少少,用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> 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值