IHttpHandler

自定义一般处理程序类及配置:

这里只是简单讲讲"可以这么做",对于原理性底层的东西,博客园有详细资料,这里略过.(IIs处理机制,文件处理映射等)

对于一般的情况下,.Net本身已经提供了.ashx处理程序,就是实现IHttpHandler接口,只要在PR方法写我们自己的逻辑代码即可;

本质也是IIS收到后缀名为.ashx文件,交给isapi.dll映射给相应的处理程序进行处理,这样我们也可以自定义程序来处理自定义后缀名文件;

/// <summary>
    /// 根据业务返回数据
    /// </summary>
    public class MyHttpHandler:IHttpHandler
    {
        public bool IsReusable
        {
            get { return true; }
        }

public void ProcessRequest(HttpContext context)
        {
            context.Response.Write("处理自定义后缀名程序文件");
        }
    }

假设自定义一个后缀为.YZR的文件,使用MyHttpHandler来处理,需要在webconfig文件进行配置一下:
<system.webServer>
    <handlers>
      <add name="myhandler" path="*.YZR" verb="GET,POST" type="UI.MyHttpHandler"/>
    </handlers>

</system.webServer>

path指后缀名,verb指提交方式,type指处理程序类的全名称;

Note:

lIIS集成模式下配置
l <system.webServer>
l<!--适配IIS集成模式-->
l    <handlers>
l      <add name="iishander" path="*.do" verb="*" type="WebApplication1.IISHandler1"/>
l    </handlers>
l  </system.webServer>
lIIS经典模式下配置
l<system.web>
l <httpHandlers>
l      <add path="*.do" verb=“GET,POST" type="WebApplication1.IISHandler1" />
l    </httpHandlers>
l  </system.web>
lVerb:注意一定要写成大写的GET,POST
IHttpHandler可以做验证码,通过Ajax方式的交互等
IHttpModule

提供给程序员自定义功能后,注册到事件管道上运行;

在Asp.Net或者Asp.net MVC中一个http的请求相应都会跑管道事件,IHttpModule就是在这个地方进行一些过滤处理的,当然.Net Framework已经对管道事件进行了处理(从BeginRequest开始,对用户信息权限进行检验,在第7个管道完成了缓存的处理,8管道.ashxPR方法,9-10Session的处理,11,12处理aspx页面等我们写的代码,13,14开始释放请求,15,16完成处理完的缓存,17,18日志,19渲染);我们自己也可以在这个基础进行添加自己的代码:

public class MyHttpModule:IHttpModule
    {
        public void Dispose()
        {
            throw new NotImplementedException();
        }

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

void context_BeginRequest(object sender, EventArgs e)
        {
            HttpContext.Current.Response.Write("已经经过我手处理完了");
        }
    }

<modules>
      <add name="mymodule" type="UI.MyHttpModule"/>
    </modules>
  </system.webServer>

这里每当http请求过来,都会走自定义的MyHttpModule.

实际开发的话,都是在最开始就截取http请求,即在BeginRequest,这样在全局文件中注册管道事件即可,并不需要自己自定义:

一般的话,IHttpModule可以做url的重写(伪静态),图片的防盗链(或者图片的水印处理)等等

Url的重写:

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            string oldUrl = Context.Request.RawUrl;
            string newUrl = string.Empty;
            System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex("/Index/(.*)/(.*)");
            if(reg.IsMatch(oldUrl))
            {
                newUrl = reg.Replace(oldUrl, "/Index.aspx?id=$1&username=$2");
                Context.RewritePath(newUrl);
            }

}

具体的写法可以根据逻辑进行改造;

转载于:https://www.cnblogs.com/Francis-YZR/p/4770919.html

个人IHttpHandler,IHttpModule认识相关推荐

  1. 生成用于ASP.NET Web API的C#客户端API

    目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...

  2. 生成用于ASP.NET Web API的TypeScript客户端API

    目录 介绍 备注 背景 推定(Presumptions) 使用代码 步骤0:将NuGet package WebApiClientGen和WebApiClientGen.jQuery安装到Web AP ...

  3. IHttpModule和IHttpHandler 应用笔记

    ASP.NET 提供了 IHttpHandler 和 IHttpModule 接口,它可使您使用与在 IIS 中所用的 Internet 服务器 API (ISAPI) 编程接口同样强大的 API,而 ...

  4. IHttpModule 与IHttpHandler的区别

    总结的很浅显易懂.转自 IHttpModule与IHttpHandler的区别主要有两点:     1.先后次序.先IHttpModule,后IHttpHandler.     2.对请求的处理上: ...

  5. 【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler

    引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进 ...

  6. IHttpModule IHttpHandler

    IHttpModule是绿叶,IHttpHandler是花. IHttpHandler按照你的请求生成响应的内容,IHttpModule对请求进行预处理,如验证.修改.过滤等等,同时也可以对响应进行处 ...

  7. IHttpModule与IHttpHandler的区别整理

    先后次序: 先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些  是  在Handler之后运行的 对请求的处理上 ...

  8. IHttpHandler 概述

    IHttpHandler 概述 可能和我一样,很多Asp.Net开发人员都有过Asp的背景,以至于我们在开发程序的时候,通常都是在"页面级"上思考,也就是说我们现在正在做的这个页面 ...

  9. 用自定义IHttpModule实现URL重写

    在本人拙作<ASP.NET夜话>第十二章中探讨过ASP.NET底层运行机制的问题,在该书中本人也讲到过了解一些ASP.NET的低层机制对于我们灵活控制ASP.NET有很大帮助,在该书中本人 ...

最新文章

  1. Python入门编程中的变量、字符串以及数据类型
  2. Fiori UI上my contact加了Dr. 后搜索不出数据的奇怪问题
  3. linux查看 idt日志,实现RCP的日志管理
  4. C#语法——await与async的正确打开方式
  5. oracle死锁解决常用方法(屡试不爽)
  6. SSH登陆的原理分析和免登陆设置!
  7. Reporting Services Catalog Database File Existence error during installing SQL Server 2008 R2
  8. 服务器磁盘会影响应用么,想了解服务器磁盘的IO吞吐量,用sqlio 工具会不会对当前服务器有影响...
  9. Excel实现多表关联查询-VLOOKUP
  10. Walking Robot Simulation
  11. SpringMVC进阶
  12. 「表白神器」Python超火隐藏表白图 你能看出来吗?「附源码」
  13. markdown中编辑数学公式用到的技巧
  14. c语言看门狗指令pic,PIC指令介绍
  15. AI+医疗:使用神经网络进行医学影像识别分析 ⛵
  16. 大扇区硬盘的出现与分析
  17. Python 元组() (元素不能修改),元组的定义,元组与列表的转换,元组的应用场景
  18. Linux ns 5. IPC Namespace 详解
  19. 【报告分享】全球手游市场研究报告 -2022十大手游趋势-OpenMediation(附下载)
  20. matlab培训2018年暑假,2016暑假建模培训Matlab小作业

热门文章

  1. python要配置几个环境变量_Python环境变量配置
  2. intranet的计算机环境包括,计算机四级考试网络工程师考点:企业网与Intranet
  3. linux离线安装ftp_安装Kali Linux之后要做的前10件事
  4. java文件流 m.jb51.net_Linux指令范例速查手册(第2版)PDF 下载
  5. 制作模板_年会邀请函制作免费模板
  6. html 实现表格控制器,HTML 表格类 - CodeIgniter 2.x 用户手册
  7. 【转】自然语言系列学习之表示学习与知识获取(八)利用远程监督多实例的关系抽取
  8. wget: unable to resolve host address “mirrors.163.com” 的解决办法
  9. 统计表格 + 可视化 ,这个超强绘图技巧值得一看!!
  10. 用 python 制作高逼格的数学动画