使用HttpModule实现UrlRewritter

目前的Asp.net Web项目都实现了地址重写,以实现真实页面名称隐藏,同时也更便于SEO优化,提高搜索引擎的收录数量。

项目中要实现URL地址重写,首先需要新建一个类(自定义名称为MyHttpModule),该类必须继承IHttpModule接口,同时实现该接口的Init和Dispose方法。在Init方法中实现对地址的重写。

建立好地址重写类后,需要在Web.config文件的System.web节中注册该HttpModule;格式为<add name="随便命名" type="HttpModule命名空间加类名,dll文件名"   />

例:

<httpModules> <add name="MyHttpModule" type="MyWeb.MyHttpModule,MyWeb"/> </httpModules>

 下面是HttpModule的生命周期:

using System; using System.Collections.Generic; using System.Text; using System.Web; namespace MyHttpModule { public class ValidaterHttpModule : IHttpModule { #region IHttpModule 成员 public void Dispose() {} public void Init(HttpApplication application) { application.BeginRequest += new EventHandler(application_BeginRequest); application.EndRequest += new EventHandler(application_EndRequest); application.PreRequestHandlerExecute += new EventHandler(application_PreRequestHandlerExecute); application.PostRequestHandlerExecute += new EventHandler(application_PostRequestHandlerExecute); application.ReleaseRequestState += new EventHandler(application_ReleaseRequestState); application.AcquireRequestState += new EventHandler(application_AcquireRequestState); application.AuthenticateRequest += new EventHandler(application_AuthenticateRequest); application.AuthorizeRequest += new EventHandler(application_AuthorizeRequest); application.ResolveRequestCache += new EventHandler(application_ResolveRequestCache); application.PreSendRequestHeaders += new EventHandler(application_PreSendRequestHeaders); application.PreSendRequestContent += new EventHandler(application_PreSendRequestContent); } void application_PreSendRequestContent(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_PreSendRequestContent<br/>"); } void application_PreSendRequestHeaders(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_PreSendRequestHeaders<br/>"); } void application_ResolveRequestCache(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_ResolveRequestCache<br/>"); } void application_AuthorizeRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_AuthorizeRequest<br/>"); } void application_AuthenticateRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_AuthenticateRequest<br/>"); } void application_AcquireRequestState(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_AcquireRequestState<br/>"); } void application_ReleaseRequestState(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_ReleaseRequestState<br/>"); } void application_PostRequestHandlerExecute(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_PostRequestHandlerExecute<br/>"); } void application_PreRequestHandlerExecute(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_PreRequestHandlerExecute<br/>"); } void application_EndRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_EndRequest<br/>"); } void application_BeginRequest(object sender, EventArgs e) { HttpApplication application = (HttpApplication)sender; application.Context.Response.Write("application_BeginRequest<br/>"); } #endregion } }

地址重写注意事项:被重写的地址如果回发,重写将失效;后缀名必须为.aspx.如果是其他自定义后缀名,如.html则必须在iis将.net映射到aspnet_isapi.dll.这样.net请求才能到达asp.net引擎.

更多请参考ASP.NET之基础概念

你可能感兴趣的:(使用HttpModule实现UrlRewritter)