个人IHttpHandler,IHttpModule认识
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:
提供给程序员自定义功能后,注册到事件管道上运行;
在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认识相关推荐
- 生成用于ASP.NET Web API的C#客户端API
目录 介绍 主要特征 主要好处 背景 推定(Presumptions) 使用代码 步骤0:将NuGet软件包WebApiClientGen安装到Web MVC/API项目 步骤1:建立.NET Cli ...
- 生成用于ASP.NET Web API的TypeScript客户端API
目录 介绍 备注 背景 推定(Presumptions) 使用代码 步骤0:将NuGet package WebApiClientGen和WebApiClientGen.jQuery安装到Web AP ...
- IHttpModule和IHttpHandler 应用笔记
ASP.NET 提供了 IHttpHandler 和 IHttpModule 接口,它可使您使用与在 IIS 中所用的 Internet 服务器 API (ISAPI) 编程接口同样强大的 API,而 ...
- IHttpModule 与IHttpHandler的区别
总结的很浅显易懂.转自 IHttpModule与IHttpHandler的区别主要有两点: 1.先后次序.先IHttpModule,后IHttpHandler. 2.对请求的处理上: ...
- 【转】Asp.net的生命周期应用之IHttpModule和IHttpHandler
引言 Http 请求处理流程 和 Http Handler 介绍 这两篇文章里,我们首先了解了Http请求在服务器端的处理流程,随后我们知道Http请求最终会由实现了IHttpHandler接口的类进 ...
- IHttpModule IHttpHandler
IHttpModule是绿叶,IHttpHandler是花. IHttpHandler按照你的请求生成响应的内容,IHttpModule对请求进行预处理,如验证.修改.过滤等等,同时也可以对响应进行处 ...
- IHttpModule与IHttpHandler的区别整理
先后次序: 先IHttpModule,后IHttpHandler. 注:Module要看你响应了哪个事件,一些事件是在Handler之前运行的,一些 是 在Handler之后运行的 对请求的处理上 ...
- IHttpHandler 概述
IHttpHandler 概述 可能和我一样,很多Asp.Net开发人员都有过Asp的背景,以至于我们在开发程序的时候,通常都是在"页面级"上思考,也就是说我们现在正在做的这个页面 ...
- 用自定义IHttpModule实现URL重写
在本人拙作<ASP.NET夜话>第十二章中探讨过ASP.NET底层运行机制的问题,在该书中本人也讲到过了解一些ASP.NET的低层机制对于我们灵活控制ASP.NET有很大帮助,在该书中本人 ...
最新文章
- Python入门编程中的变量、字符串以及数据类型
- Fiori UI上my contact加了Dr. 后搜索不出数据的奇怪问题
- linux查看 idt日志,实现RCP的日志管理
- C#语法——await与async的正确打开方式
- oracle死锁解决常用方法(屡试不爽)
- SSH登陆的原理分析和免登陆设置!
- Reporting Services Catalog Database File Existence error during installing SQL Server 2008 R2
- 服务器磁盘会影响应用么,想了解服务器磁盘的IO吞吐量,用sqlio 工具会不会对当前服务器有影响...
- Excel实现多表关联查询-VLOOKUP
- Walking Robot Simulation
- SpringMVC进阶
- 「表白神器」Python超火隐藏表白图 你能看出来吗?「附源码」
- markdown中编辑数学公式用到的技巧
- c语言看门狗指令pic,PIC指令介绍
- AI+医疗:使用神经网络进行医学影像识别分析 ⛵
- 大扇区硬盘的出现与分析
- Python 元组() (元素不能修改),元组的定义,元组与列表的转换,元组的应用场景
- Linux ns 5. IPC Namespace 详解
- 【报告分享】全球手游市场研究报告 -2022十大手游趋势-OpenMediation(附下载)
- matlab培训2018年暑假,2016暑假建模培训Matlab小作业
热门文章
- python要配置几个环境变量_Python环境变量配置
- intranet的计算机环境包括,计算机四级考试网络工程师考点:企业网与Intranet
- linux离线安装ftp_安装Kali Linux之后要做的前10件事
- java文件流 m.jb51.net_Linux指令范例速查手册(第2版)PDF 下载
- 制作模板_年会邀请函制作免费模板
- html 实现表格控制器,HTML 表格类 - CodeIgniter 2.x 用户手册
- 【转】自然语言系列学习之表示学习与知识获取(八)利用远程监督多实例的关系抽取
- wget: unable to resolve host address “mirrors.163.com” 的解决办法
- 统计表格 + 可视化 ,这个超强绘图技巧值得一看!!
- 用 python 制作高逼格的数学动画