封装有关个别 HTTP 请求的所有 HTTP 特定的信息。
为继承 IHttpModule 和 IHttpHandler 接口的类提供了对当前 HTTP 请求的 HttpContext 对象的引用。该对象提供对请求的内部 Request、Response 和 Server 属性的访问。HttpContext: 保持单个用户、单个请求的数据,并且数据只在该请求期间保持。被提供用于保持需要在不同的HttpModules和HttpHandlers之间传递的值。它也可以用于保持某个完整请求的相应信息。 再结合它提供的RewriteUrl方法来看,当用户发送某个Http请求,我们可以通过HttpContext进行截获,查看里面包含了哪些请求的信息,然后可以进行一系列的操作,比如说切换到其他的页面,这个时候,可以重组请求的数据满足新页面的要求。
那么在link.aspx中需要判断是进入哪一种的采购流程,切换到不同的页面 PrintBook.aspx 或者 EBook.aspx。
所以这个Http请求需要涉及两个页面,针对每个页面link.aspx和printBook.aspx或者EBook.aspx都会各自存在一个httpRequest,但是却共用同一个httpContext。
切换需要使用Server.Transfer方法,〔直接在Server上进行其他页面的调用,保证是同一个HttpContext,信息不会丢失。〕。而不是Response.Redirect(它是将Response发送回浏览器,然后浏览器再发送了一个新的请求给目标页面,是两个不同的HttpContext了)。
而Rewriterpath方法是指重写请求的路径,并不是转换页面,因为通常Http请求的Url不一定对应有相关的页面,那么在Application_BeginRequest中去检查Url请求,如果符合一定条件就可以RewritePath,就是将莫须有的Url请求对应出存在的页面。
比如说通常的404 Page Not Found,有些网站会提供很有趣的页面,就是这样的实现机制。当然这种机制是WebServer来实现的,原理是相同的。