IHttpHandler 系列二 应用篇

using System;
using System.IO;
using System.Data;
using System.Configuration;
using System.Collections.Generic;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Text;
using System.Text.RegularExpressions;


namespace Phone.HttpHandler
{
    public class SimpleHandler : IHttpHandler
    {

        private List<RegexInfo> _regex_list = new List<RegexInfo>();
        private List<ipFilter> _ip_filter = new List<ipFilter>();
        public SimpleHandler()
        {
            DataSet ds = new DataSet();
            //读取url重写规则文件,并写入RegexInfo结构的实例中
            ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/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("~/App_Data/ipFilter.xml"));
            foreach (DataRow r in ds.Tables["IpFilters"].Rows)
                _ip_filter.Add(new ipFilter((string)r["ip"]));
        }

        // Override the ProcessRequest method
        public void ProcessRequest(HttpContext context)
        {
            //context.Response.Write("<H1>Hello, I'm an HTTP handler</H1>");
           
            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; }
        }
    }
    //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;
        }
    }
}

---------

web.config 中加下如下配置

<httpHandlers>
   <add verb="POST,GET" path="*.html" type="Phone.HttpHandler.SimpleHandler,Phone.HttpHandler" />
 </httpHandlers>

 

并在iis 网站属性中 isapi 扩展中添加 .html的处理程序为 aspx页面一样的就行了

你可能感兴趣的:(String,struct,filter,regex,Path,dataset)