• HttpHandler与HttpModule区别


    ASP.Net处理Http Request时,使用Pipeline(管道)方式,由各个HttpModule对请求进行处理,然后到达 HttpHandler,HttpHandler处理完之后,仍经过Pipeline中各个HttpModule的处理,最后将HTML发送到客户端浏览 器中。

    HttpModule会在页面处理前和后对页面进行处理,所以它不会影响真正的页面请求。通常用在给每个页面的头部或者尾部添加一些信息(如版 权声明)等.

    IHttpModule与IHttpHandler的区别整理
    1.先后次序.先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些是在Handler之后运行的
    2.对请求的处理上:
    IHttpModule是属于大小通吃类型,无论客户端请求的是什么文件,都会调用到它;例如aspx,rar,html的请求.
    IHttpHandler则属于挑食类型,只有ASP.net注册过的文件类型(例如aspx,asmx等等)才会轮到调用它.
    3.IHttpHandler按照你的请求 生成响应的内容,IHttpModule对请求进行预处理,如验证、修改、过滤等等,同时也可以对响应进行处理

    HttpModule 继承System.Web.IHttpModule接口,实现自己的HttpModule类。必须要实现接口的两个方法:Init和Dispose。在 Init中,可以添加需要截取的事件;Dispose用于资源的释放,如果在Init中创建了自己的资源对象,请在Dispose中进行释放。

    例: public class TestHttpModule:IHttpModule
    {

    public void Dispose()
    { }

    public void Init(HttpApplication context)
    {
    context.BeginRequest += new EventHandler(context_BeginRequest);
    }

    void context_BeginRequest(object sender, EventArgs e)
    {
    HttpApplication appliction = sender as HttpApplication;
    appliction.Response.Write("HttpModule请求的URL:" + appliction.Request.Url.AbsolutePath);
    }
    }

    自定义HttpModule的用途,有全局的身份/权限验证、自定义网站访问/操作日志的记录、处于管理/调试等目的对站点进行监控追踪 等

    HttpHandler是完全的对Http Request的截取。
    首先,继承System.Web.IHttpHandler接口,实现自己的HttpHandler类。必须要实现接口的ProcessRequest方 法和IsReusable属性。ProcessRequest方法中完成对每个Http Request的处理,发送处理结果的HTML到输出缓存中。IsReusable属性被.Net Framework调用,用以确定这个HttpHandler的实例是否可以被重用于同类型其它的Request处理。
    如果你在自己的HttpHandler类中,需要读取或者是写Session值,需要再继承一个接口IRequiresSessionState。这个接 口没有任何方法,只是一个标记接口。继承这个接口之后,就可以在自己的HttpHandler中访问Session,可以在Session中写入值。
    例: public class TestHandler:IHttpHandler
    {

    public bool IsReusable
    { get { return true; } }

    public void ProcessRequest(HttpContext context)
    {
    string s = context.Request.Url.AbsolutePath;
    context.Server.Execute("default.aspx?execute=" + context.Server.UrlEncode(s));//URL重定向
    }
    }

    <add verb="*" path="*.shtml" type="UI.Core.Http.TestHandler,UI"/>

    对于请求时的 a.shtml可以不存在

  • 相关阅读:
    设置linux文件权限,使得同一用户组的可以在文件夹内自由增删文件(夹)
    opencv3.4.8编译opencv-contrib并使用sift
    安装anaconda简单教程
    Arch升级时断开链接恢复
    配置远程连接容器内镜像(映射容器内系统的22端口到宿主机上)
    t-SNE是什么?
    远程连接路由器下的主机
    windows下,本地PyCharm连接远程服务器显示图片
    卷积网络中,关于BatchNorm的训练与加载
    学习Keras
  • 原文地址:https://www.cnblogs.com/tearer/p/2534952.html
Copyright © 2020-2023  润新知