在ASP.NET中实现网址重写很简单,只需调用System.Web.HttpContext类的RewritePath()方法即可。HttpContext类中包含有关于特定HTTP请求的HTTP规范信息。ASP.NET引擎每接收到一个特定请求后便针对该请求创建一个特定的实例,这个类包含一些属性诸如:Request和Response属性,分别提供对请求和响应的访问;Application和Session属性提供对Application变量和Session变量的访问;User属性提供对已授权用户信息的访问。
回想一下BeginRequest事件在AuthenticateRequest事件之前引发,而AuthenticateRequest事件又在AuthorizeRequest事件之前引发。
那么什么时候在HttpModule调用网址重写合适呢?他决定于所使用的验证方式,当然如果不使用验证方式的话,那么无论是在BeginRequest事件、AuthenticateRequest事件还是AuthorizeRequest事件中调用网址重写没有多大区别,如果使用表单验证方式并且不使用Windows验证方式的话,把网址重写放入AuthorizeRequest事件委托中调用既可,如果使用Windows验证方式的话,把这项功能放入BeginRequest事件或者AuthenticateRequest事件调用就行了。
*HttpContext就相当于java的ServletContext,指为当前请求(request)所进行包装的环境
整理一下ASP.NET Framework处理一个Http Request的流程:
HttpRequest-->inetinfo.exe-->ASPNET_ISAPI.dll-->Http Pipeline-->ASPNET_WP.exe-->HttpRuntime-->HttpApplication Factory-->HttpApplication-->HttpModule-->HttpHandler Factory-->HttpHandler-->HttpHandler.ProcessRequest()