- 浏览: 158984 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
北极的。鱼:
几个常用的CSS效果:1.色块透明,文字不透明:设置色块的rg ...
网页前端的浏览器兼容 -
北极的。鱼:
数字证书的作用就是用来说明,里面的公钥是谁的。
数字签名 -
北极的。鱼:
数字证书的作用,其实就是证明,证书里包含的公钥是哪个人的。
数字签名 -
北极的。鱼:
面试题,类似冒泡排序把一个字符串的大写字母放到字符串的后面,各 ...
【转】冒泡排序 -
北极的。鱼:
另一种简单桶排序实现:
using System;
using ...
【转】桶排序(Bucket Sort)
ASP.Net 处理 Http Request 时,使用 Pipeline (管道)方式,由各个 HttpModule 对请求进行处理,然后到达 HttpHandler , HttpHandler 处理完之后,仍经过 Pipeline 中各个 HttpModule 的处理,最后将 HTML 发送到客户端浏览器中。
生命周期中涉及到几个非常重要的对象: HttpHandler , HttpModule , IHttpHandlerFactory , 他们的执行顺序大致的执行过程是这样的:
client
端发送页面请求,被
IIS
的某个进程截获,它根据申请的页面后缀
(.aspx)
不同,调用不同的页面处理程序
(.asp->asp.dll; .aspx->ISAPI.dll)
。而页面处理程序在处理过程中,则要经历
HttpModule
,
HttpHandler
的处理:前者
HttpModule
用于页面处理前和处理后的一些事件的处理,后者
HttpHandler
进行真正的页面的处理。
如前所说,
HttpModule
会在页面处理前和后对页面进行处理,所以它不会影响真正的页面请求。通常用在给每个页面的头部或者尾部添加一些信息(如版权声明)等。曾经见过一些免费的空间,我们的页面上传上去后,浏览的时候发现,在每个页面的头部和尾部多了很多小广告
....
如果理解了
HttpModule
的原理,要做这个就不是很难了
~
IHttpModule
与
IHttpHandler
的区别整理
1.
先后次序
.
先
IHttpModule,
后
IHttpHandler.
注
:Module
要看你响应了哪个事件,一些事件是在
Handler
之前运行的,一些是在
Handler
之后运行的
2.
对请求的处理上
:
IHttpModule
是属于大小通吃类型
,
无论客户端请求的是什么文件
,
都会调用到它
;
例如
aspx,rar,html
的请求
.
IHttpHandler
则属于挑食类型
,
只有
ASP.net
注册过的文件类型
(
例如
aspx,asmx
等等
)
才会轮到调用它
.
3.
IHttpHandler
按照你的请求生成响应的内容,
IHttpModule
对请求进行预处理,如验证、修改、过滤等等,同时也可以对响应进行处理
ASP.Net 系统本身配置有很多 HttpHandler 和 HttpModule ,以处理 aspx 等 .Net 标准的页面文件,以及这些页面文件中标准的事件处理等。查看
%System%/Microsoft.NET\Framework\v2.0.50727\CONFIG 目录下的 web.config 文件中的 httpHandlers 和 httpModules 节点,可以看到这些配置。如果有兴趣,可以使用 Reflector 查看 .Net 系统中相关的类和方法,了解 .Net 如何处理以及做了什么处理。
.Net 也提供了一套机制来开发自定义的 HttpHandler 和 HttpModule ,均可以用于对 HttpRequest 的截取,完成自定义的处理。 HttpModule 继承 System.Web.IHttpModule 接口,实现自己的 HttpModule 类。必须要实现接口的两个方法: Init 和 Dispose 。在 Init 中,可以添加需要截取的事件; Dispose 用于资源的释放,如果在 Init 中创建了自己的资源对象,请在 Dispose 中进行释放。
【转自:http://www.cnblogs.com/cyan/archive/2009/02/04/1383580.html 】
namespace MyModule { public class MyHttpModule : IHttpModule { public MyHttpModule() { } //Init方法用来注册HttpApplication 事件。 public void Init(HttpApplication r_objApplication) { r_objApplication.BeginRequest += new EventHandler(this.BeginRequest); } public void Dispose() { } private void BeginRequest(object r_objSender, EventArgs r_objEventArgs) { HttpApplication objApp = (HttpApplication)r_objSender; objApp.Response.Write("您请求的URL为" + objApp.Request.Path); } } }
将编译的 dll 文件拷贝到 web 项目的 bin 目录下,在 web 项目的 web.config 文件 system.web 节点中配置:
<httpModules> <add name="test" type="MyModule.MyHttpModule,MyHttpModule"/> </httpModules>
namespace MyHandler { public class MyHttpHandler : IHttpHandler, IRequiresSessionState { public MyHttpHandler() { } public bool IsReusable { get { return true; } } public void ProcessRequest(HttpContext context) { HttpResponse objResponse = context.Response; objResponse.Write("This request is handled by MyHttpHandler"); } } }
把编译的
dll
文件拷贝到
web
项目的
bin
目录下。
接下来,这样来测试一下
MyHttpHandler
。我们为
IIS
配置一个以
.cc
为后缀名的文件类型,用我们写的
MyHttpHandler
来处理。
首先,在
IIS
站点的
Configuration
配置里面,添加一个对
.cc
后缀名处理的
Application Extention Mapping
项。
然后,在
web
项目的
web.config
节点中配置:
<httpHandlers> <add verb="*" path="*.cc" type="MyHandler.MyHttpHandler,MyHandler"/> </httpHandlers>
verb
属性配置这个
HttpHandler
处理那些
HTTP
方法,例如
GET
、
POST
等,如果是处理所有方法,就用
*
。
path
属性配置
HttpHandler
对哪些文件进行处理,例如可以是
myfile.cc
,如果是处理所有的
.cc
文件,就用
*.cc
。
这样,这个站点上所有
.cc
类型文件的访问,都由
MyHttpHandler
处理。使用
http://localhost/
站点虚拟目录
/a.cc
访问测试站点,可以看到测试效果。当然,
a.cc
这个文件在
Web
服务器上是并不存在的。
对
HttpHandler
的使用,比较典型的有
.Net
的
Web MVC
开源项目
Maverick
。
Maverick
使用一个
Dispatcher
类对所有的
Http Request
进行截取,他以
.m
作为后缀名向
Web
服务器提交请求,在
Dispatcher
中,将
.m
的后缀去掉,提取
Command Name
,然后以这个
command name
从配置文件中加载处理的
flow
,形成一个
chain
,依次对
chain
上的各个
command
和
view
进行处理,对各个
command
和
view
的处理结果可能会在
chain
中选择不同的处理分支,每个处理的
Step
中将处理结果的
HTML
写入
Response
的缓存中进行输出。
总体来说,
Maverick
的框架架构概念很不错,但也存在明显的缺陷,以后有时间再详细的写写它的架构和需要改进之处。
总之,将 HttpModule 、 HttpHandler ,以及使用 Ajax 等将客户端进行封装结合起来,能够给 web 项目的开发带来非常大的改善空间。
我们经常看到很多网站访问文章的时候才用的是
***.html
或
***.shtml (
如本
blog
的日志访问效果
)
,其时这写文件在服务器上不存在的,那为什么会出现这样的效果呢,是因为
Web
服务器上对
URL
执行了重写,把访问的
URL
根据特定的格式重写成内部访问页面来实现的,它的好处是便于用户理解,同时搜索引擎也能更好地收入你的网站,当然其它的好处也很多,这里不做一一介
绍了。
本文所讲的是使用
Asp.Net
中的
HttpHandler
实现
URL
重写的,它所实现的原理请看这里,本程序可以处理任何
Url
,因为我在程序中使用了
URL
过虑,只有访问文件名是数字的才进行处理,并指在内部执行一个新的页面,并输出数据,代码如下:
public void ProcessRequest(HttpContext Context) { try { //申明Request HttpRequest Request = Context.Request; //取来路Url的绝对路径 string Url = Request.Url.AbsolutePath; //取访问的Web文件的开始字符间隔数 int RegStart = Url.LastIndexOf("/") + 1; //申明一个确定Web文件名是否全是数字 Regex Reg = new Regex(@"\d+"); //用正则表达式进行匹配 if (Reg.IsMatch(Url, RegStart)) { //如果web文件名是数字,则判定是查询相关文章,执行指定页面 Context.Server.Execute("~/PermaLink.aspx?id=" + Reg.Match(Url, RegStart).Value); } } catch { Context.Response.Redirect(Context.Request.Url.ToString()); } }
当然你首先要做的是先建一个类,并继承自 IHttpHandler ,然后把这段代码拷入,并编译。在 Web 项目中若要使用此功能,需要在 web.config 里面加上如下语句:
<httpHandlers> <add verb="*" path="*.shtml" type="HttpHandle.UrlRewrite" /> </httpHandlers>
同时,还要在 IIS 中对 Web 项 目进行配置 ,在 Web 项目的属性中,在主目录选项卡里,把执行权限改为 " 脚本和可执行文件 " ,然后打开配置,在应用程序扩展里加上需重写的文件格式的扩展。好了,万事具备,只欠运行了。
发表评论
-
【转】对IIS7经典模式和集成模式的理解
2015-03-31 16:01 1394转自: http://www.cnblogs.com/Law ... -
【转】细说 ASP.NET控制HTTP缓存
2015-03-27 16:42 549转自: http://www.cnblogs.com/fis ... -
【转】Forms身份验证
2015-03-25 22:33 999转自:http://www.cnblogs.com/win ... -
【转】session的存储方式和配置
2015-03-25 17:13 699转自:http://www.cnblogs.com/zha ... -
Net托管世界的应用程序域和线程
2014-05-17 01:41 1252转载:http://www.360doc.com/conte ... -
应用程序域(Application Domain)
2014-05-17 01:16 2347转载:http://www.360doc.com/cont ... -
后台用C#发起HttpWeb请求
2014-09-17 22:03 783public static string HttpPost ... -
一个asp.net页面加载问题
2011-09-16 09:20 1325我记得Page_Load中的代码在每次提交页面或刷新页面的时 ... -
【转】AspNet2.0页面生命周期
2011-08-25 20:26 1066转自:http://blog.csdn.net/SysBug/ ... -
asp.net 操作XML
2011-08-15 16:33 1167最近的一个项目中要操作XML文件。 一下为本人的一点笔记,提 ... -
避免页面重复提交
2011-08-13 21:31 1083最近考虑了一个问题:假设当前一个用户在留言本提交留言。要求:提 ... -
【转】C#调用WebService
2011-07-22 16:54 1052转自:http://www.cnblogs.c ... -
【转】盗链问题
2011-07-08 11:18 1077盗链 的危害我就不说了,网上有很多。 直接分析盗链原理 ... -
【转】HttpModule的认识
2011-07-07 16:36 1537转自:http://www.cnblogs.com/tangs ... -
【转】ASP.NET Process Model之二:ASP.NET Http Runtime Pipeline
2011-07-07 14:45 1521转自:http://www.cnblogs.com/artec ... -
【转】ASP.NET Process Model之一:IIS 和 ASP.NET ISAPI
2011-07-07 14:37 929转自:http://www.cnblogs.com ... -
【转】详解IIS处理asp.net请求过程
2011-07-06 16:26 1551转自:http://www.hndxc.net/show.a ... -
asp.net中加入视频播放器
2011-03-14 17:03 11221.avi格式 <object id=&qu ... -
【转】ASP.NET中的cookie读写方法
2011-03-09 10:24 936Cookie (HttpCookie的实例)提供了一种在 We ... -
关于获得Repeater中某行数据项的某列值
2010-12-27 17:10 3224如何获得Repeater中某行数据项的某列值。高手飘过~~~ ...
相关推荐
生命周期中涉及到几个非常重要的对象:HttpHandler,HttpModule,IHttpHandlerFactory,他们的执行(顺序)大致的执行过程是这样的:client端发送页面请求,被IIS的某个进程截获,它根据申请的页 面后缀(.aspx)不同,...
在这个主题中,我们将深入探讨ASP.NET架构中的两个关键组件:HttpHandler和HttpModule。 **HttpHandler**是ASP.NET处理HTTP请求的核心组件。每个HTTP请求都会被路由到一个特定的HttpHandler,它负责处理特定类型的...
通过深入理解HttpModule和HttpHandler的工作原理,我们可以更好地优化应用程序性能,实现复杂的业务需求。博客上的学习资料会进一步详细解释这些概念,并提供实践示例,帮助你轻松掌握这两个核心组件。
在深入理解HttpHandler和HttpModule之前,我们需要明确两者在***应用程序中所扮演的角色以及它们是如何运作的。***是构建动态网页和网络应用程序的一个框架,其中处理请求的方式是通过一个称为请求管线的机制。 1. ...
HttpHandler 实现了类似于 ISAPI Server Extension 的功能,而 HttpModule 实现了类似于 ISAPI Filter 的功能。 HttpHandler 的概念和基本使用方法: HttpHandler 是一个接口,用于处理 Http 请求和响应。它提供了...
HttpModule,HttpHandler详细解释
### httpmodule和httphandler详解 #### 一、概述 在ASP.NET开发中,`HttpModule`和`HttpHandler`是两个重要的概念,它们都属于HTTP运行时的一部分,用于处理HTTP请求的不同方面。掌握这两者之间的区别以及如何使用...
例如,你可能创建一个HttpModule来记录所有请求的开始时间,然后在HttpHandler中处理请求并记录结束时间,从而计算请求的处理时间。 在ASP.NET中,配置HttpModule和HttpHandler通常在Web.config文件中完成。使用和...
在.NET框架中,HTTP模块(HttpModule)和HTTP处理程序(HttpHandler)是构建Web应用程序的核心组件,它们在ASP.NET的请求生命周期中扮演着至关重要的角色。HttpHandlerFactory则是用于创建和管理HttpHandler的工厂类...
在本篇中,我们将深入探讨HttpHandler的概念、工作原理以及如何编写自定义HttpHandler。 HttpHandler是ASP.NET应用程序中处理特定类型HTTP请求的类。每当一个用户向服务器发送请求时,IIS(Internet Information ...
这个"通用 万能 HttpHandler"的概念是指一个设计得非常灵活和可复用的HttpHandler实现,能够处理多种不同的请求场景。在这个特定的情况下,我们关注的是文件上传功能,特别是通过HttpWebRequest来实现。 文件上传是...
这个标题“HttpHandler做图片水印”表明我们将探讨如何利用HttpHandler来实现图片的水印功能。图片水印通常用于在图像上添加标识或版权信息,以防止未经授权的使用或保护图像的原创性。 首先,我们需要理解...
利用HttpHandler创建自定义后缀Rss源 通过IhttpHandler实现图片验证码 使用HttpHandler实现图片防盗链
在ASP.NET中,我们可以使用HttpHandler来实现这一功能。 **HttpHandler** 是ASP.NET中的一个核心组件,它处理HTTP请求并返回响应。通过自定义HttpHandler,我们可以拦截特定类型的请求,并对其进行定制处理。在实现...
HTTPHandler与ASP.NET中的另一种处理程序——HTTPModule不同,HTTPModule在每个请求的生命周期中都会被调用,而HTTPHandler只处理特定类型的请求。HTTPHandler的优势在于它可以更高效地处理特定任务,因为它不涉及...
示例: Hello,HttpHandler(最简单的HttpHandler) -------------------------------------------------------------------------------- 示例: 使用HttpHandler实现文件下载页面 ---------------------------------...
在ASP.NET开发中,"HttpHandler防图片盗链"是一个重要的技术实践,它涉及到网站资源保护、服务器性能优化以及网络安全等多个方面。通过Web.config配置,我们可以实现一个简单但有效的图片防盗链策略,防止他人未经...