asp.net Url Rewriting 地址重写方法(1/6)

在探讨如何实现网址重写这项技术之前,很有必要了解一下iis是处理所接收的web请求的机制。 当一个web请求到达iis web服务器时,iis会根据所请求的文件后缀名来决定如何处理该请求,iis可以处理诸如html页面、图片、静态内容,或者将请求转发给isapi应 用程序,由该isapi应用程序处理后生成html静态内容返回给iis,最后由iis将请求结果发送回给客户端。(一个isapi应用程序就是一套编译 好能随时在后台运行的类库,它的任务就是根据请求生成相关的内容。)

  例如:如果iis接收到一个对info.asp教程的请求,它会将该 请求转交给 asp.dll来处理,该isapi应用程序调出并执行所请求的asp页面,然后把生成的html代码返回给iis,iis最后把内容发送回请求客户端。 对于asp.net教程页面,iis则将请求转交给名为 aspnet_isapi.dll的isapi应用程序来处理,该isapi应用程序 调用托管的asp.net工作进程来处理该请求,并将生成的html代码返回给请求客户端。

  你可以自定义iis, 将某一类扩展名映射到指定的isapi应用程序,图一显示了iis管理工具中的应用程序配置对话框。


图一.已配置的文件扩展名映射

  关于对iis如何管理所接收的请求的详细探讨有些超出本文内容,,重要的是要了解 asp.net引擎只负责处理对扩展名已经被正确配置映射到aspnet_isapi.dll的网络请求。

用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确立用户身份后引发,当然还有诸如authorizerequestresolverequestcacheendrequest等其它很多事件,这些 都是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。

首页 1 2 3 4 5 6 末页

时间: 2024-08-08 01:53:32

asp.net Url Rewriting 地址重写方法(1/6)的相关文章

用ASP获取客户端IP地址的方法

要想透过代理服务器取得客户端的真实IP地址,就要使用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取.不过要注意的事,并不是每个代理服务器都能用 Request.ServerVariables("HTTP_X_FORWARDED_FOR") 来读取客户端的真实 IP,有些用此方法读取到的仍然是代理服务器的IP.还有一点需要注意的是:如果客户端没有通过代理服务器来访问,那么用 Request.ServerVari

asp.net URL 显示乱码 解决方法_实用技巧

比如你传入汉字,或者传入"§"等其他编码格式的字符串系统解析后的url为乱码.经过在网上的查找觉得一下两种方式比较好: 1.如果url在后台解析的话采用HttpUtility.UrlEncode(url,System.Text.Encoding.GetEncoding("编码格式(GB2312)")); 2.如果是传入前台的话在组织URL时对传递信息进行编码.编码方法可以写到js文件中使用encodeURIComponent(source)函数,其中source为中

php 正则得到url的地址代码

php教程 正则得到url的地址代码  //方法一 $str = '<a href="http://www.jzread.com" target="_blank" name="doc3_p"><img src="" onload="setImgSize(this,170,170);"></a>';     preg_match_all ('|^<a href=&qu

.net 获取重写前url真实地址方法

.net 获取重写前url真实地址方法 if (request.headers["x-rewrite-url"] != null) { response.write("http://" + request.url.host + request.headers["x-rewrite-url"]); } else if (request.headers["x-original-url"] != null) {     respon

在ASP.NET中实现Url Rewriting

asp.net 概要 分析如何使用微软提供的ASP.NET来对动态产生的URL地址进行网址重写. 网址重写是实现一种截取网址请求并将其进行处理后重新指向到一个指定的网址的过程.作者本人在对各种实现网址重写的技术进行研究和探讨后得出的经验和方法,希望能对您有所帮助. 内容简介 稍微花点时间看一看你做的网站里头的URL地址,你看到类似这样的地址吗http://yoursite.com/info/dispEmployeeInfo.aspx?EmpID=459-099&type=summary ?也许你

ASP.NET的地址重写(URLRewriter)实现原理及代码示例

一.概述 访问者输入:http://wu-jian.cnbolgs.com/default.aspx,实际请求和响应的地址却是:http://www.cnblogs.com/wu-jian/default.aspx, 这就是UrlRewrite,除了实现二级域名功能,它在简化用户输入地址.SEO.网站版本迭代更新等多个方面发挥着重要作用. 微软曾在.net framework 1.1中提供过一个名为URLRewriter的小工具供开发人员轻松实现UrlRewrite,下载地址为:http://d

ASP.NET的地址重写“.NET研究”(URLRewriter)实现原理及代码示例

一.概述 访问者输入:http://wu-jian.cnbolgs.com/default.aspx,实际请求和响应的地址却是:http://www.cnblogs.com/wu-jian/default.aspx, 这就是UrlRewrite,除了实现二级域名功能,它在简化用户输入地址.SEO.网站版本迭代更新等多个方面发挥着重要作用. 微软曾在.net framework 1.1中提供过一个名为URLRewriter的小工具供开发人员轻松实现UrlRewrite,下载地址为:http://d

一起谈.NET技术,ASP.NET的地址重写(URLRewriter)实现原理及代码示例

一.概述 访问者输入:http://wu-jian.cnbolgs.com/default.aspx,实际请求和响应的地址却是:http://www.cnblogs.com/wu-jian/default.aspx, 这就是UrlRewrite,除了实现二级域名功能,它在简化用户输入地址.SEO.网站版本迭代更新等多个方面发挥着重要作用. 微软曾在.net framework 1.1中提供过一个名为URLRewriter的小工具供开发人员轻松实现UrlRewrite,下载地址为:http://d

详谈关于Discuz!NT 的URL地址重写(URLRewrite)

在Discuz!NT中的前台页面访问(特别是aspx)是被HttpModule接管的,所以大家在Discuz.Web项目的目录下看到的唯一"aspx文件"是index.aspx,而所有其它前台页面都有"/aspx/"文件夹下的相应的子目录中,而这些子目录名称是与后台所"生成"的模板存在对应关系的.而这种"关系"的绑定是通过dnt_templates(模板数据表)来进行关联的.而有关模板机制的文章详见:     "Di