|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
来吧!老师们!我代表千千万万的asp.net/C#的初学者在这里呼唤着!由于本人如今地点项目中良多url传值的中央都未将值经由Server.UrlEncode编码而间接传值,以是形成在传值的时分存在大批毛病。好比值中存在汉字,大概存在+,/等特别标记时,吸收到的值就和本来的传的值纷歧样了。以是我们在url传值时必定要将值经UrlEncode编码后再传,url的编码可参看本站:
Url编码与解码剖析
但如今项目中已存在大批的没有编码的情形该怎样办呢?一个一个往改的话,总会存一些没有改到的中央。以是盘算增加IhttpModel类,在HTTP实行管线链中的第一个事务BeginRequest中对未编码的url参数举行编码。
示比方下:
注:本示例只起一个引子的感化,未列出一切特别标记的交换。
我们鄙人面的示例中演示将url中的+号交换成"%2B"。由于间接传+号,吸收到的值会是一个空格。
publicclassSHttpModule:IHttpModule
{
privateList<Pair>_encodelist;
///<summary>
///须经url编码的字符
///</summary>
publicList<Pair>EncodeList
{
get
{
if(_encodelist==null)
{
_encodelist=newList<Pair>();
}
//在这个list中能够增加更多的须编码的字符
_encodelist.Add(newPair("+","%2B"));
return_encodelist;
}
}
publicvoidInit(HttpApplicationHttpApplication)
{
//BeginRequest事务为http实行管线链中第一个产生的事务,在这个事变中,我们能够将未经编码的特别字符替换成编码后的字符,然后使用RewritePath办法重写url地点。
HttpApplication.BeginRequest+=newEventHandler(HttpApplication_BeginRequest);
}
voidHttpApplication_BeginRequest(objectsender,EventArgse)
{
HttpApplicationApplication=(HttpApplication)sender;
HttpContextcontext=Application.Context;
stringpath=Application.Request.Url.PathAndQuery;
//由于url中的#有着特别的意义,它取代页面将跳转到指定的锚文本上。以是在没有锚文本的情形下,是不该该呈现#标记的。
if(path.Contains("#"))
{
context.RewritePath("/堕落页面");
}
boolisEncode=false;
if(!path.Contains("%"))
{
foreach(PairpinEncodeList)
{
if(path.Contains(p.First.ToString()))
{
path=path.Replace(p.First.ToString(),p.Second.ToString());
isEncode=true;
}
}
if(isEncode)
{
context.RewritePath(path);
}
}
}
publicvoidDispose()
{
}
固然,该办法会存在一些缺点,好比经由RewritePath重写的url地点后会分明减轻服务器cpu的包袱。另有大概形成页面回发毛病。详细办理办法与HttpModule模块的注册请检察本站:
怎样经由过程RewritePath办法重写Url地点完成伪静态在CSDN里搜索一下“初学”两字,竟有三百余篇帖子(也许更多)。有些帖子说,有了asp的基础,只要15天就能很熟悉了,我甚感自己的愚钝。更多帖子是向大家请教初学者适合看书。两个多月的时间(当然平常杂事比较多。 |
|