一般处理程序(HttpHandler):是一个实现System.Web.IHttpHandler接口的特殊类。任何一个实现了IHttpHandler接口的类,是作为一个外部请求的目标程序的前提。(凡是没有实现此接口的类,就不能被浏览器请求。)
它由支持ASP.NET的服务器调用和启动运行。一个HttpHandler程序负责处理它所对应的一个或一组URL地址的访问请求,并接收客户端发出的访问请求信息(请求报文)和产生响应内容(响应报文)。
简单的说:可以通过创建一个HttpHandler程序来生成浏览器代码发送回客户端浏览器
HttpHandler程序可以完成普通类程序所能完成的大多数任务:

1.获取客户端通过HTML的Form表单提交的数据和URL参数

2.创建对客户端的响应消息内容

3.访问服务器端的文件系统

4.连接数据库并开发基于数据库的应用

5.调用其他类

Request(HttpRequest) & Response(HttpResponse)

Request(HttpRequest)常用成员(服务器如何获取浏览器提交的数据?)

QueryString属性:获取通过GET方式传来的数据(浏览器:超链接,和表单Method=get)

//例:context.Request.QueryString["testName"];

Form属性:获取通过POST方式传来的数据(表单method=post)

//例:context.Request.Form["testName"];

Params属性:客户端提交的数据集合

Response(HttpResponse)常用成员(服务器如何向浏览器响应数据?)

Write()方法:直接在页面上输出内容

//例:context.Response.Write("Hello,World!");WriteFile();

Redirect()方法:重定向到另外一个页面,服务器发送命令让浏览器跳转

//例:context.Response.Redirect("TypeInfoList.ashx");

End()方法:结束输出

HtmlPage1.html

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6 </head>
 7 <body>
 8     <h1>Hello World.</h1>
 9 </body>
10 </html>

Handler1.ashx

 1     public class Handler1 : IHttpHandler
 2     {
 3
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             //处理:上文(请求),下文(响应)
 7             //context.Request是HttpRequest类型,包含了所有的请求信息
 8             //context.Response是HttpResponse类型,包含了所有的响应信息
 9
10             //告诉浏览器如何去解析执行返回的内容
11             context.Response.ContentType = "text/plain";
12
13             //返回的信息,通过Write方法直接输出即可
14             context.Response.Write("<h1>Hello World</h1>");
15         }
16
17         public bool IsReusable
18         {
19             get
20             {
21                 return false;
22             }
23         }
24     }

GetTest.html

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6 </head>
 7 <body>
 8     <form method="GET" action="GetTest.ashx">
 9         <input type="text" name="txt2" />
10         <input type="text" name="txt1" />
11
12         <input type="submit" value="get练习" />
13     </form>
14 </body>
15 </html>

GetTest.ashx

 1     public class GetTest : IHttpHandler
 2     {
 3
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             //get请求:name属性指定键,value属性指定值
 7             //以=连接键值对
 8             //再以&符号连接多个请求信息
 9             //再以?符号连接请求地址与参数
10             //?txt1=123&txt2=456
11
12             //接收参数的方式:以键来接收
13             string txt1 = context.Request.QueryString["txt1"];
14             string txt2 = context.Request.QueryString["txt2"];
15
16
17             context.Response.ContentType = "text/html";
18             context.Response.Write(txt1 + "<br/>" + txt2);
19         }
20
21         public bool IsReusable
22         {
23             get
24             {
25                 return false;
26             }
27         }
28     }

PostTest.html

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6 </head>
 7 <body>
 8     <form method="POST" action="PostTest.ashx">
 9         <input type="text" name="txt1" />
10         <input type="text" name="txt2" />
11         <input type="submit" value="post练习" />
12     </form>
13 </body>
14 </html>

PostTest.ashx

 1     public class PostTest : IHttpHandler
 2     {
 3
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             //txt1=123&txt2=456
 7             //请求信息不被拼接在url后面
 8             //以键值对的形式来传递数据,=,&
 9
10             //接收以post方式提交的参数
11             string txt1 = context.Request.Form["txt1"];
12             string txt2 = context.Request.Form["txt2"];
13
14
15             context.Response.ContentType = "text/html";
16             context.Response.Write(txt1 + "<br/>" + txt2);
17         }
18
19         public bool IsReusable
20         {
21             get
22             {
23                 return false;
24             }
25         }
26     }

GetPostTest.html

 1 <!DOCTYPE html>
 2 <html xmlns="http://www.w3.org/1999/xhtml">
 3 <head>
 4     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
 5     <title></title>
 6 </head>
 7 <body>
 8     <form action="GetPostTest.ashx" method="GET">
 9         <input type="text" name="txt1" />
10         <input type="submit" value="get" />
11     </form>
12
13     <hr />
14     <form action="GetPostTest.ashx" method="POST">
15         <input type="text" name="txt1" />
16         <input type="submit" value="post" />
17     </form>
18 </body>
19 </html>

GetPostTest.ashx

 1     public class GetPostTest : IHttpHandler
 2     {
 3
 4         public void ProcessRequest(HttpContext context)
 5         {
 6             //如果不希望区分请求方式的话,可以直接使用Request索引器
 7             string txt1 = context.Request["txt1"];
 8
 9             //如果希望将这个值做进一步处理,最好做一个非空判断
10             //string.IsNullOrEmpty(txt1)
11
12             context.Response.ContentType = "text/plain";
13             context.Response.Write(txt1);
14         }
15
16         public bool IsReusable
17         {
18             get
19             {
20                 return false;
21             }
22         }
23     }

Web.config

 1 <?xml version="1.0" encoding="utf-8"?>
 2
 3 <!--
 4   有关如何配置 ASP.NET 应用程序的详细信息,请访问
 5   http://go.microsoft.com/fwlink/?LinkId=169433
 6   -->
 7
 8 <configuration>
 9   <system.web>
10     <compilation debug="true" targetFramework="4.5" />
11     <httpRuntime targetFramework="4.5" />
12   </system.web>
13 </configuration>

转载于:https://www.cnblogs.com/ninghongkun/p/6268922.html

002-一般处理程序(HttpHandler)相关推荐

  1. C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用

    这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用. HttpModule:Http模块,可以在页面处理前后.应 ...

  2. asp.net架构之请求处理过程:HttpModule,HttpHandler

    一 asp.net 事件模型机制 -----------------------一 客户的请求页面由aspnet_isapi.dll这个动态连接库来处理,把请求的aspx文件发送给CLR进行编译执行, ...

  3. 【转载】Asp.Net 全生命周期

    用三张图片详解Asp.Net 全生命周期 此文是转载阳阳多的博客内容,特此声明. 下面我们使用三张图片解析ASP.net的整个生命周期,我总感觉使用图片更加的清楚的说明这种问题,所以使用的这样方式 说 ...

  4. 2013年7月04日_回顾总结

    1.浏览器与服务器的交互是通过Socket 2.浏览器与服务器交互的语法是:Http协议 3.浏览器于服务器交互的目的:获取服务器资源(html.图片.js.css) 4.服务器的功能:满足浏览器的需 ...

  5. WebApi系列(从.Net 到 .Net Core)【更新】

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

  6. java安装找不到uri,【找不到与请求 URI匹配的 HTTP 资源】(转)

    在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议 WCF 基于SOAP的 ...

  7. ASP.NET那点不为人知的事(二)

    上一篇博文<ASP.NET那点不为人知的事(一)>中我们提到HttpApplication有19个标准事件,在HttpApplication的第8个事件PostMapRequestHand ...

  8. Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1

    为什么asp.net落后了,还讲这些?因为mvc 还是沿用老框架的,加了一个请求模块,在第七个事件中触发; 一.概念 HTTP模块(HttpModule)是通过实现IHttpModule接口和处理事件 ...

  9. WebApi系列(从.Net FrameWork 到 .Net Core)

    一. 简介  1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...

最新文章

  1. 基于Charlieplexing算法(查理复用算法)的LED矩阵控制设计
  2. 200行代码解读TDEngine背后的定时器
  3. PostgreSQL 理解 template1 和 template0
  4. 在浏览器里使用 SAP GUI
  5. 页面复杂对象传递参数 开发中遇到的问题
  6. 计算机网络的含义是什么意思,互联网的基本含义是什么
  7. MongoDB基本命令使用
  8. NAT网关之SNAT进阶使用(二)构建ECS级别SNAT出网方式
  9. 各省GTFP绿色全要素生产率面板数据(2004-2018年)
  10. 更精确的冲刺计划更好的Sprint Burndown图表
  11. pandas模块DataFrame数据结构行数据的获取
  12. 定义一个接口ITest,接口中有3个抽象方法如下。
  13. 使用Dockerfile集成python3 docker基础镜像
  14. 恐怖呀,恐怖....
  15. 步进电机控制Proteus仿真
  16. reverse()和reverse_copy()用法
  17. GMap2 与 google.maps.Map 的区别
  18. tomcat服务器连接数问题解决
  19. 成功解决WIN系统如何更改默认放在C盘的【我的文档】/【图片】位置的存储路径(修改到其它非系统的盘符)
  20. openfeign 转发post 接口 错误 Incomplete output stream executing POST http://xxxx

热门文章

  1. ffplay for mfc 代码备忘
  2. sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...
  3. android webview 设置cookie时间,解决Android webview设置cookie和cookie丢失的问题
  4. layui数据表格格式化
  5. php7.2.2 配置数据库连接,Tp5连接sql server数据库(更新:PHP7.2加载不懂sqlsrv扩展)...
  6. 液晶显示屏的C语言编码,单片机液晶汉字显示c语言程序
  7. java 引用类快捷键_Java数据类型及其转换经常用到的快捷键
  8. php期末考试题机考_phP基础知识期末考试题.doc
  9. c语言转换为python语言_使用C语言中的数据缓冲区和NumPy数组之间的转换来为Python接口打包C程序的最佳方法是什么?...
  10. 三国佚事--巴蜀危机