|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
强大的字体控制和排版能力。CSS控制字体的能力比糟糕的FONT标签好多了。
之前用url重写时是用的msurlrewriter,用了今后发明了良多不敷,自界说功效太弱,并且跟着重写划定规矩的增添,web.config大概会愈来愈年夜,实践上,url重写就是完成IHttpHandler接口.
全部流程分二步走:
1、用一个xml文件来存储重写划定规矩,个中这些划定规矩是一些复杂的正则表达式
2、完成IHttpHandler接口
起首看一下xml文件的格局:
以下是援用片断:
<?xmlversion="1.0"encoding="utf-8"?>
<root>
<regex>
<!--重写今后的假造地点-->
<b><![CDATA[xxx,(?<id>[0-9]+).html$]]></b>
<!--实践地点-->
<a><![CDATA[xxx.aspx?id=${id}]]></a>
</regex>
</root>
信任下面的xml人人都能看懂.
以下是援用片断:
usingSystem;
usingSystem.IO;
usingSystem.Data;
usingSystem.Configuration;
usingSystem.Collections.Generic;
usingSystem.Web;
usingSystem.Web.Security;
usingSystem.Web.UI;
usingSystem.Web.UI.WebControls;
usingSystem.Web.UI.WebControls.WebParts;
usingSystem.Web.UI.HtmlControls;
usingSystem.Text;
usingSystem.Text.RegularExpressions;
usingMicrosoft.VisualBasic;
//RegexInfo布局,用来存储从xml文件中读取到的数据
publicstructRegexInfo
{
publicstring_before;
publicstring_after;
publicRegexInfo(stringbefore,stringafter)
{
_before=before.ToLower();
_after=after.ToLower();
}
}
//ipFilter布局,用来存储被封的IP
publicstructipFilter
{
publicstring_ip;
publicipFilter(stringip)
{
_ip=ip;
}
}
publicclassHtmlHttpHandler:IHttpHandler//完成IHttpHandler接口
{
privateList<RegexInfo>_regex_list=newList<RegexInfo>();
privateList<ipFilter>_ip_filter=newList<ipFilter>();
publicHtmlHttpHandler()
{
DataSetds=newDataSet();
//读取url重写划定规矩文件,并写进RegexInfo布局的实例中
ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/Regexs.xml"));
foreach(DataRowrinds.Tables["regex"].Rows)
_regex_list.Add(newRegexInfo(((string)r["b"]).Trim(),((string)r["a"]).Trim()));
ds.Reset();
//读取被封的IP列表
ds.ReadXml(System.Web.HttpContext.Current.Server.MapPath("~/App_Data/ipFilter.xml"));
foreach(DataRowrinds.Tables["IpFilters"].Rows)
_ip_filter.Add(newipFilter((string)r["ip"]));
}
publicvoidProcessRequest(HttpContextcontext)
{
string_ip=context.Request.UserHostAddress;//猎取IP
foreach(ipFilterrin_ip_filter)
{
if(_ip==r._ip)
{
context.Response.Write("对不起,您的IP:"+_ip+"已被限定!");
context.Response.End();
}
}
stringpath=context.Request.Path.ToLower();//猎取以后会见的重写过的子虚URL
foreach(RegexInforin_regex_list)
path=Regex.Replace(path,r._before,r._after);//婚配出其实在的URL
context.Server.Execute(path);
}
//OverridetheIsReusableproperty.
publicboolIsReusable
{
get{returntrue;}
}
}
OK,IHttpHandler接口就被完成了,上面稍配一下web.config就能够完成URL重写了
在web.config的<system.web></system.web>中到场:
以下是援用片断:
<httpHandlers>
<addverb="*"path="*.html"type="HtmlHttpHandler"/>
</httpHandlers>
暗示后缀名为.html的文件全体交给HtmlhttpHandler类去向理,最初配一下iis就好了。
至于简繁的转换,你能够加到ProcessRequest中,至于怎样完成转换见下一页。
</p>
每个声明内只能有一个属性,如果属性值中含有空格用双引号括起来例,在一个声明块内可以有多个声明,每个声明用分号隔开。 |
|