002-一般处理程序(HttpHandler)
一般处理程序(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)相关推荐
- C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用
这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用. HttpModule:Http模块,可以在页面处理前后.应 ...
- asp.net架构之请求处理过程:HttpModule,HttpHandler
一 asp.net 事件模型机制 -----------------------一 客户的请求页面由aspnet_isapi.dll这个动态连接库来处理,把请求的aspx文件发送给CLR进行编译执行, ...
- 【转载】Asp.Net 全生命周期
用三张图片详解Asp.Net 全生命周期 此文是转载阳阳多的博客内容,特此声明. 下面我们使用三张图片解析ASP.net的整个生命周期,我总感觉使用图片更加的清楚的说明这种问题,所以使用的这样方式 说 ...
- 2013年7月04日_回顾总结
1.浏览器与服务器的交互是通过Socket 2.浏览器与服务器交互的语法是:Http协议 3.浏览器于服务器交互的目的:获取服务器资源(html.图片.js.css) 4.服务器的功能:满足浏览器的需 ...
- WebApi系列(从.Net 到 .Net Core)【更新】
一. 简介 1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...
- java安装找不到uri,【找不到与请求 URI匹配的 HTTP 资源】(转)
在.net下,创建一个HTTP服务,有很多方案,比较老ashx,一般处理程序(HttpHandler), Web Service SOAP协议的,数据格式是XML,HTTP协议 WCF 基于SOAP的 ...
- ASP.NET那点不为人知的事(二)
上一篇博文<ASP.NET那点不为人知的事(一)>中我们提到HttpApplication有19个标准事件,在HttpApplication的第8个事件PostMapRequestHand ...
- Asp.Net高级知识回顾_HttpModule及应用程序生命周期_1
为什么asp.net落后了,还讲这些?因为mvc 还是沿用老框架的,加了一个请求模块,在第七个事件中触发; 一.概念 HTTP模块(HttpModule)是通过实现IHttpModule接口和处理事件 ...
- WebApi系列(从.Net FrameWork 到 .Net Core)
一. 简介 1. 什么是WebApi? WebApi是一个很广泛的概念,在这里我们特指.Net平台下的Asp.Net WebApi框架,它是针对各种客户端(浏览器.APP等)来构建Http服务的一个 ...
最新文章
- 基于Charlieplexing算法(查理复用算法)的LED矩阵控制设计
- 200行代码解读TDEngine背后的定时器
- PostgreSQL 理解 template1 和 template0
- 在浏览器里使用 SAP GUI
- 页面复杂对象传递参数 开发中遇到的问题
- 计算机网络的含义是什么意思,互联网的基本含义是什么
- MongoDB基本命令使用
- NAT网关之SNAT进阶使用(二)构建ECS级别SNAT出网方式
- 各省GTFP绿色全要素生产率面板数据(2004-2018年)
- 更精确的冲刺计划更好的Sprint Burndown图表
- pandas模块DataFrame数据结构行数据的获取
- 定义一个接口ITest,接口中有3个抽象方法如下。
- 使用Dockerfile集成python3 docker基础镜像
- 恐怖呀,恐怖....
- 步进电机控制Proteus仿真
- reverse()和reverse_copy()用法
- GMap2 与 google.maps.Map 的区别
- tomcat服务器连接数问题解决
- 成功解决WIN系统如何更改默认放在C盘的【我的文档】/【图片】位置的存储路径(修改到其它非系统的盘符)
- openfeign 转发post 接口 错误 Incomplete output stream executing POST http://xxxx
热门文章
- ffplay for mfc 代码备忘
- sock 文件方式控制宿主机_基于嵌入式Linux系统实现YAFFS2文件系统存储方案的设计...
- android webview 设置cookie时间,解决Android webview设置cookie和cookie丢失的问题
- layui数据表格格式化
- php7.2.2 配置数据库连接,Tp5连接sql server数据库(更新:PHP7.2加载不懂sqlsrv扩展)...
- 液晶显示屏的C语言编码,单片机液晶汉字显示c语言程序
- java 引用类快捷键_Java数据类型及其转换经常用到的快捷键
- php期末考试题机考_phP基础知识期末考试题.doc
- c语言转换为python语言_使用C语言中的数据缓冲区和NumPy数组之间的转换来为Python接口打包C程序的最佳方法是什么?...
- 三国佚事--巴蜀危机