您的位置: 旅游网 > 情感

在ASP.NET中实现Url Rewriting(二)

发布时间:2019-09-13 20:41:38

用ISAPI过滤器来分析请求

除了将请求的文件扩展名映射到相应的ISAPI应用程序外,IIS还执行一些其他工作。例如 IIS还主动对发出请求的客户端用户进行授权,并判断已授权用户是否对其请求的文件拥有访问权限,在一个请求过程的全部生命期内,IIS的处理经历了几个阶段,在每一个阶段IIS都生成一个事件,而该事件可以被ISAPI过滤器实时操控的。

如同ISAPI应用程序一样, ISAPI过滤器也是一块块安装在Web服务器上的非托管代码。 ISAPI应用程序用于对所接收的特定文件类型做出响应,而ISAPI过滤器含有对IIS生成的事件做出响应的代码(contain Code),甚至可以编辑进出的数据。ISAPI也含有众多应用程序,包括:

· 权限控制与授权(Authentication and Authorization)

· 日志记录与监视(Logging and Monitoring)

· HTTP内容压缩(HTTP Compression)

· 网址重写(URL Rewriting)

本文所探讨的用ASP.NET实现的网址重写技术就是 基于ISAPI过滤器用于网址重写的技术内容,然而我们仍然要讨论一下究竟是使用ISAPI过滤器还是使用ASP.NET应用程序提供的技术来实现网址重写技术。  当一个请求传入ASP.NET引擎的时候会发生什么?

ASP.NET问世之前,在IIS Web服务器上的网址重写功能需要通过ISAPI过滤器来实现,自从这个家伙问世后我们就能通过ASP.NET来实现URL重写了,因为ASP.NET的解释引擎与IIS有极大的相似之处,产生这些相似性主要是因为 ASP.NET:

· 在处理接收的请求的生命期内也会产生事件;

· 允许任意数量的HttpModule操控产生的事件,这与IIS中的ISAPI过滤器类似;

· 将请求的资源委托给HttpHandler处理,这与IIS中的ISAPI应用程序类似。

和IIS一样,在一个请求的整个生命期内,ASP.NET对该请求的处理状态发出的状态改变信号引发相应的事件。例如:BeginRequest事件在ASP.NET开始响应客户端请求之始引发;AuthenticateRequest事件在ASP.NET确立用户身份后引发,当然还有诸如AuthorizeRequest,ResolveRequestCache和EndRequest等其它很多事件,这些 都是System.Web.HttpApplication类下的事件,更多信息请参考技术文档中的类HttpApplication概要。

如上所述, 可以创建ISAPI过滤器并用于相应IIS引发的事件,同理,ASP.NET也提供了HttpModule用于响应ASP.NET引擎引发的事件,一个ASP.NET应用程序 通过配置可以拥有多个HttpModule。ASP.NET引擎 每处理一个请求,便初始化一个相应配置好的HttpModule,并允许它 针对请求处理期间引发的事件生成相应的事件委托。事实上ASP.NET引擎 处理每一个请求调用大量的事件委托。FormsAuthenticationModule就是众多内嵌HttpModule中的一个,它 首先检查是否使用表单授权,如果是的话,它 将检查用户是否已授权,如果没有授权则自动把用户重定向到指定的登录页面。(即:在asp.net中可以直接记录并判别用户登录授权的问题了!)

回忆在IIS中,一项请求最后被转交给一个ISAPI应用程序处理,该应用程序针对每一项请求进行处理并返回相应的数据。例如,客户端发出一个访问经典ASP页面的请求,IIS将该请求转交给asp.dll程序处理,asp.dll针对该请求执行asp页面内容,并返回HTML编码。ASP.NET也使用了类似的手法,ASP.NET引擎在将这些HttpModule初始化后,判断并决定调用相应的HttpModule来处理该请求。(问:怎么程序操作httpModule)

所有通过ASP.NET引擎解析的请求最终被送交一个HttpHandler或者HttpHandlerFactory(一个HttpHandler只是简单地返回一个用于处理该请求的HttpHandler的实例。)最终的委托呈现并响应所请求的HTML编码,并发送回IIS,IIS则将HTML返回给请求客户端。

ASP.NET包含许多HttpHandler,例如,PageHandlerFactory是用于呈现ASP.NET页面内容,WebServiceHandlerFactory用于呈现ASP.NET Web服务的SOAP数据包,TraceHandler用于将ASP.NET请求资源的HTML标记写入trace.axd。

图二描绘了一个针对ASP.NET资源的请求所经过的处理流程。首先,IIS接收到该请求并将其转交给aspnet_isapi.dll。其次,ASP.NET引擎将一些HttpModule初始化。最后,最终的HttpHandler被调用,生成相应的标记语言,并将其返回给IIS,最终返回到请求客户端。

图二.IIS和ASP.NET对请求的处理过程

创建并注册自定义HttpModule和HttpHandler

创建自定义HttpModule的工作相对较简单,它包括一个实现当前接口的托管类,HttpModule必须实现System.Web.IHttpModule接口,同样HttpHandler和HttpHandlerFactory必须分别实现System.Web.IHttpHandler接口和System.Web.IhttpHandlerFactory接口。有关创建HttpHandler和HttpModule的细节已经超出本书范围。

一旦HttpModule和HttpHandler被创建后,必须向Web应用程序注册。如果要 向整个Web服务器HttpModule和HttpHandler只需简单的写入machine.config文件;如果是 由指定的Web应用程序调用则需在该程序的web.config配置文件中添加几行XML标记。

例如,要向指定的Web应用程序注册HttpModule和HttpHandler,只需向该Web应程序的web.config配置文件中configuration\System.Web节中添加下列几行:

<HttpModules>

<add type="type" name="name" />

</HttpModules>

查看本文来源

孩子咳嗽吃什么药效果好
热淋清颗粒的主要成分
小儿脾胃虚弱怎么调理
丁桂薏芽健脾凝胶能治腹泻吗
猜你会喜欢的
猜你会喜欢的