IHttpHandler的那些事

今晚看了一晚上的IHttpHAndler的知识,

在自定义了Httphandler后,在配置webconfig里配置也是个技术活,什么集成模式,什么asp管道什么的;

 <?xml version="1.0" encoding="utf-8"?>
<!--
有关如何配置 ASP.NET 应用程序的详细信息,请访问
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" /> <!--下面的这一种光错-->
<!--<httpHandlers>
<add name="MyFirstHandler" verb="*" path="*" type="IHttpHandlerDemo.MyFirstHandler, IHttpHandlerDemo"/>
</httpHandlers>--> </system.web>
<!--下面的这一种就ojbk了-->
<system.webServer>
<!--<modules>
<add name="MyFirstHandler" type="IHttpHandlerDemo.MyFirstHandler" />
</modules>-->
<handlers>
<add name="MyFirstHandler" path="*" verb="*" type="IHttpHandlerDemo.MyFirstHandler" preCondition="integratedMode" />
</handlers>
</system.webServer>
</configuration>
 public partial class TestPage : System.Web.UI.Page
{
//Page类也是继承至IHttpHandler,所以也就是先执行的Httphandler的注册事件
protected void Page_Load(object sender, EventArgs e)
{ }
//然后你会发现这个时候请求会进到ProcessRequest()方法,而不会进到Page_Load()里面了,至于原因,这和Page类里面的封装有关系。要说明的是所有实现了IHttpHandler接口的类型都可以在ProcessRequest()方法里面处理当前http请求;即使你在PageLoad里写东西,也不会在里面执行了;
因为重写了ProcessRequest这个方法
public void ProcessRequest(HttpContext context)
{
context.Response.Write("你好");
}
}

Page_Load和ProcessRequest

而且,在自定义了Httphandler后,程序会先运行Httphandler里的程序;所以这样就会可以先加载二维码或者是否登录的情况(看了好多的博文,这2提到的最多)

ASP.NET:使用HttpModule(给页面添加页头和页尾,重写URL)

一点一点学ASP.NET之基础概念——HttpHandler

IHttpModule实现URL重写

MVC框架的原理详解

 public class TestMyHandler:IHttpHandler
{
public bool IsReusable
{
get { return false; }
} public void ProcessRequest(HttpContext context)
{
context.Response.Write("从asex页面进来"); //throw new NotImplementedException();
}
}

IHttpHandler包括的方法

 namespace MyTestMVC
{
public class TestMyModule:IHttpModule
{
public void Dispose()
{
//throw new NotImplementedException();
} public void Init(HttpApplication app)
{
//事件注册
app.BeginRequest += app_BeginRequest;
app.EndRequest += app_EndRequest;
} void app_EndRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
app.Context.Response.Write("请求结束");
} void app_BeginRequest(object sender, EventArgs e)
{
var app = (HttpApplication)sender;
app.Context.Response.Write("请求开始");
}
}
}

IHttpModule包含的方法

在Init方法里面,通过HttpApplication对象来注册请求的事件。这样,每次发起一次http请求的时候都进到这两个方法。

当然,这些注册就能执行了吗?想得美,系统哪里知道你这个自定义HttpModule的存在,所以必须要在Web.config里面声明一下。

仅仅是注册了是不能够行的呀,还必须得留有“备案”才能行呀;不能你买个域名就让你发布网站呀,得备案;

在webconfig里备案,我称它为程序中的备案局。

<system.webServer>
<modules>
<add name="TestMyModule" type="MyTestMVC.TestMyModule, MyTestMVC" preCondition="integratedMode" />
</modules>
</system.webServer>

  

IHttpHandler的学习(1)的更多相关文章

  1. IHttpHandler的学习(0-2)

    这个IHttpHandler,要想到asp.net生命周期 ,想到哪个从你发起请求开始,这个请求通过HttpModule------>IHttpHandler的: 执行HttpModule的一系 ...

  2. IHttpHandler的学习(0)

    本片文章转自网络 问题1:什么是HttpHandler?(Handler:处理者:那就是对Http请求的处理拉) 问题2:什么是HttpModule? 问题3:什么时候应该使用HttpHandler什 ...

  3. CSS3学习总结——实现瀑布流布局与无限加载图片相册

    首先给大家看一下瀑布流布局与无限加载图片相册效果图: 一.pic1.html页面代码如下: <!DOCTYPE html> <html> <head> <me ...

  4. MVC系列——MVC源码学习:打造自己的MVC框架(三:自定义路由规则)

    前言:上篇介绍了下自己的MVC框架前两个版本,经过两天的整理,版本三基本已经完成,今天还是发出来供大家参考和学习.虽然微软的Routing功能已经非常强大,完全没有必要再“重复造轮子”了,但博主还是觉 ...

  5. MVC系列——MVC源码学习:打造自己的MVC框架(二:附源码)

    前言:上篇介绍了下 MVC5 的核心原理,整篇文章比较偏理论,所以相对比较枯燥.今天就来根据上篇的理论一步一步进行实践,通过自己写的一个简易MVC框架逐步理解,相信通过这一篇的实践,你会对MVC有一个 ...

  6. MVC系列——MVC源码学习:打造自己的MVC框架(一:核心原理)

    前言:最近一段时间在学习MVC源码,说实话,研读源码真是一个痛苦的过程,好多晦涩的语法搞得人晕晕乎乎.这两天算是理解了一小部分,这里先记录下来,也给需要的园友一个参考,奈何博主技术有限,如有理解不妥之 ...

  7. ASP.Net WebForm温故知新学习笔记:一、aspx与服务器控件探秘

    开篇:毫无疑问,ASP.Net WebForm是微软推出的一个跨时代的Web开发模式,它将WinForm开发模式的快捷便利的优点移植到了Web开发上,我们只要学会三步:拖控件→设属性→绑事件,便可以行 ...

  8. 学习“迷你ASP.NET MVC框架”后的小结

    看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...

  9. 学习资源asp.net

    http://www.runoob.com ajax 同一表单,多部分提交.增加,修改,删除 服务器端控件: http://technet.microsoft.com/zh-cn/library/cc ...

随机推荐

  1. 头像文件上传 方法一:from表单 方法二:ajax

    方法一:from表单 html 设置form表单,内包含头像预览div,内包含上传文件input 设置iframe用来调用函数传参路径 <!--表单提交成功后不跳转处理页面,而是将处理数据返回给 ...

  2. Java中如何解决线程安全问题

    给出一个问题,如下: 解决方案如下: public class Demo_5 { public static void main(String[] args) { //创建一个窗口 TicketWin ...

  3. MySQL用户添加和分配权限

    mysql数据库insertdelete服务器file mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口 ...

  4. Eclipse schema xml提示

    步骤一:确定xsd文件位置 spring-framework-3.2.0.RELEASE\schema\beans  步骤二:复制路径  步骤三:搜索“xml catalog”  步骤四:添加约束提示 ...

  5. swift语言点评十二-Subscripts

    Classes, structures, and enumerations can define subscripts, which are shortcuts for accessing the m ...

  6. java爬虫的selenium基础使用

    实用博客  selenium java教程 具体项目运用 项目背景:从西安市人民政府网站上获取到县区新闻,从下图可以看出“区县热点”是需要在页面中进行点击的,这里页面使用的是javascript的函数 ...

  7. Debian9.5系统DNS服务器BIND软件配置说明

    DNS的出现的历史 网络出现的早期是使用IP地址通讯的,那时就几台主机通讯.但是随着接入网络主机的增多,这种数字标识的地址非常不便于记忆,UNIX上就出现了建立一个叫做hosts的文件(Linux和W ...

  8. 异步调用task

    异步主要用来提升程序性能,会增加系统的开销(新建一个线程去执行异步任务). 可应用于耗时长的操作,比如:访问数据库时(应用程序和数据库不在同一台服务器上).服务之间的调用(服务会分散在不同的服务器上) ...

  9. POJ-1511 Invitation Cards 往返最短路 邻接表 大量数据下的处理方法

    题目链接:https://cn.vjudge.net/problem/POJ-1511 题意 给出一个图 求从节点1到任意节点的往返路程和 思路 没有考虑稀疏图,上手给了一个Dijsktra(按紫书上 ...

  10. centos7 安装freeswitch

    1.安装运行库 yum install -y git gcc-c++ wget alsa-lib-devel autoconf automake bison broadvoice-devel bzip ...