|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
可怜的程序员,还是逃不出移植的命运!列位在扫瞄本站时假如仔细一些,就会发明本站的Url地点全都是目次式的,也就是像我的电脑中文件夹式的目次布局,地点中不包括文件名。之前在网上也看到有人问到这类目次式Url的完成办法,本站是经由过程重写Url地点来完成的,本章就说说小站的完成办法,固然,完成该功效的办法多种多样,不单单限于小站以下要说的办法。
1,起首新建一个类库项目,将主动天生的Class1文件删失落,本人创立一个HttpModule.cs类。
2,修正代码,使HttpModule.cs类承继自IHttpModule接口,承继该接口必需完成
voidDispose();
voidInit(HttpApplicationcontext);
两个办法,Dispose办法我们可不必管它,我们仅必要在Init办法中完成HttpApplication的BeginRequest事务便可,代码以下:
publicvoidInit(HttpApplicationcontext)
{
context.BeginRequest+=newEventHandler(context_BeginRequest);
}
context_BeginRequest事务以下:
voidcontext_BeginRequest(objectsender,EventArgse)
{
HttpApplicationapplication=(HttpApplication)sender;
HttpContextcontext=application.Context;
stringpath=context.Request.Path;
//以上这句代码是完成客户端哀求的假造路径,如本站中的某链接的地点为http://www.lmwlove.com/ab/CatalogID1,那末当扫瞄器者点击该链接的时分,context.Request.Path的值就是http://www.lmwlove.com/ab/CatalogID1了。
猎取到该值后,就能够依据本人界说的划定规矩来举行Url重写了。好比本站中的ab代表tec/tec_article.aspx文件,那末就能够依据path中是不是包括ab来举行重写了。
以下代码:
if(path.Contains("ab"))
{
context.RewritePath("tec/tec_article.aspx")
}
}
全都代码以下:
usingSystem;
usingSystem.Collections.Generic;
usingSystem.Web;
usingSystem.Text;
usingSystem.Text.RegularExpressions;
usingSystem.Collections;
namespaceMyHttpModule
{
publicclassUrlReWriter:IHttpModule
{
publicvoidInit(HttpApplicationcontext)
{
context.BeginRequest+=newEventHandler(context_BeginRequest);
}
voidcontext_BeginRequest(objectsender,EventArgse)
{
HttpApplicationapplication=(HttpApplication)sender;
HttpContextcontext=application.Context;
stringpath=context.Request.Path;
if(path.Contains("ab"))
{
context.RewritePath("tec/tec_article.aspx")
}
}
publicvoidDispose()
{
}
}
}
就是如许复杂,第二步就算完成了。
3,编译HttpModule.cs,将dll文件复制到网站的bin文件夹下。
4,配制web.config文件
在web.config文件的system.web节下配制
<httpModules>
<addname="UrlReWriter"type="MyHttpModule.UrlReWriter,MyHttpModule"/>
</httpModules>
个中type中的MyHttpModule.UrlReWriter为UrlReWriter.cs的定名空间,MyHttpModule为编译后dll文件名。
注:我在本机调试时是用以上配制,经由过程OK,但上传到租用空间后报错。将配制文件改成
<system.webServer>
<modules>
<addname="UrlReWriter"type="MyHttpModule.UrlReWriter,MyHttpModule"/>
</modules>
</system.webServer>
就OK了。
重写后会激发另外一个成绩,就是当页面回发时,页面会定向到原始地点,办理办法请拜见本站:RewritePath重写Url后回发会定向到原始地点的办理计划对于new隐藏成员的作用,往往是出于使用了一个第三方类库,而你又无法获得这个类库的源代码,当你继承这个类库的某个类时,你需要重新实现其中的一个方法,而又需要与父类中的函数使用同样的函数,这是就需要在自定义的子类中把那个同名函数(或成员)加上new标记,从而隐藏父类中同名的成员。 |
|