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
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<h1>Hello World.</h1>
</body>
</html>
Handler1.ashx
public class Handler1 : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
//处理:上文(请求),下文(响应)
//context.Request是HttpRequest类型,包含了所有的请求信息
//context.Response是HttpResponse类型,包含了所有的响应信息 //告诉浏览器如何去解析执行返回的内容
context.Response.ContentType = "text/plain"; //返回的信息,通过Write方法直接输出即可
context.Response.Write("<h1>Hello World</h1>");
} public bool IsReusable
{
get
{
return false;
}
}
}
GetTest.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form method="GET" action="GetTest.ashx">
<input type="text" name="txt2" />
<input type="text" name="txt1" /> <input type="submit" value="get练习" />
</form>
</body>
</html>
GetTest.ashx
public class GetTest : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
//get请求:name属性指定键,value属性指定值
//以=连接键值对
//再以&符号连接多个请求信息
//再以?符号连接请求地址与参数
//?txt1=123&txt2=456 //接收参数的方式:以键来接收
string txt1 = context.Request.QueryString["txt1"];
string txt2 = context.Request.QueryString["txt2"]; context.Response.ContentType = "text/html";
context.Response.Write(txt1 + "<br/>" + txt2);
} public bool IsReusable
{
get
{
return false;
}
}
}
PostTest.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form method="POST" action="PostTest.ashx">
<input type="text" name="txt1" />
<input type="text" name="txt2" />
<input type="submit" value="post练习" />
</form>
</body>
</html>
PostTest.ashx
public class PostTest : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
//txt1=123&txt2=456
//请求信息不被拼接在url后面
//以键值对的形式来传递数据,=,& //接收以post方式提交的参数
string txt1 = context.Request.Form["txt1"];
string txt2 = context.Request.Form["txt2"]; context.Response.ContentType = "text/html";
context.Response.Write(txt1 + "<br/>" + txt2);
} public bool IsReusable
{
get
{
return false;
}
}
}
GetPostTest.html
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>
</head>
<body>
<form action="GetPostTest.ashx" method="GET">
<input type="text" name="txt1" />
<input type="submit" value="get" />
</form> <hr />
<form action="GetPostTest.ashx" method="POST">
<input type="text" name="txt1" />
<input type="submit" value="post" />
</form>
</body>
</html>
GetPostTest.ashx
public class GetPostTest : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
//如果不希望区分请求方式的话,可以直接使用Request索引器
string txt1 = context.Request["txt1"]; //如果希望将这个值做进一步处理,最好做一个非空判断
//string.IsNullOrEmpty(txt1) context.Response.ContentType = "text/plain";
context.Response.Write(txt1);
} public bool IsReusable
{
get
{
return false;
}
}
}
Web.config
<?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" />
</system.web>
</configuration>
002-一般处理程序(HttpHandler)的更多相关文章
- 一般处理程序HttpHandler的应用
ashx 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名.一个httpHandler接受并处理一个http请求,类比于Java中的servlet.类比于在Ja ...
- 使用一般处理程序HTTPHandler下载文件
一般来说我们可以用HTTPHandler来处理一些简单的逻辑,比如验证码.下载文件等. 以下载word文档为例讲解一下如何在HHTPHandler中下载文件,不限于word文档,如果下载其他文件,需要 ...
- EasyUI - 使用一般处理程序 HttpHandler (.ashx)
以easyui中的panel中,使用url加载数据为列. 效果: html代码: <div id="p" style="padding: 10px;"&g ...
- 【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用
这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用. HttpModule:Http模块,可以在页面处理前后.应 ...
- HttpModule,HttpHandler,HttpHandlerFactory
HttpModule:Http模块,可以在页面处理前后.应用程序初始化.出错等时候加入自己的事件处理程序. HttpHandler:Http处理程序,处理页面请求 HttpHandlerFactory ...
- .net-一般处理程序及生命周期
IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHandler):是 ...
- 【.net项目中。。】.net一般处理程序使用方法
1.基本原理图 IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHa ...
- C#强化系列:HttpModule,HttpHandler,HttpHandlerFactory简单使用
这三个对象我们在开发Asp.net程序时经常会用到,似乎很熟悉,但有时候又不太确定.本文通过一个简单的例子来直观的比较一下这三个对象的使用.HttpModule:Http模块,可以在页面处理前后.应用 ...
- asp.net中的路由系统
ASP.NET MVC重写了ASP.NET管道HttpModule和处理程序HttpHandler.MVC自定义了MvcHandler实现了Controller的激活和Action的执行.但是在请求到 ...
随机推荐
- 最全最详细:ubuntu16.04下linux内核编译以及设备驱动程序的编写(针对新手而写)
写在前面:本博客为本人原创,严禁任何形式的转载!本博客只允许放在博客园(.cnblogs.com),如果您在其他网站看到这篇博文,请通过下面这个唯一的合法链接转到原文! 本博客全网唯一合法URL:ht ...
- es_5.4.4 reinstall log and upgrade to V6.5.4--APM
elastic-APM opbeat is deadhttps://blog.csdn.net/chenwenhao0304/article/details/83302942https://www ...
- dbclient python ---influxdb -install -relay--http write--read.[create db]
1s=1000ms 1ms=1000 microseconds 1microsecond=1000 nanoseconds+01:00 from influxdb import InfluxDBCli ...
- [knowledge] 停止等待协议
再读TCP/IP详解 说到流量控制, 可能便涉及了两方面 1. 停止等待协议. https://baike.baidu.com/item/%E5%81%9C%E6%AD%A2%E7%AD%89%E5% ...
- [others] 一个酷酷的站
https://xkcd.com/ https://xkcd.com/1080/
- 内置函数time
time import time.time() # 浮点型,给计算机看,随机 时间有三种: First: 时间戳 (time.time()) Second: 结构化时间 可以修改 Third: ...
- python3安装ipython 过程以及问题
由于需要再python3的环境下运行demo,因此安装了python3的ipython notebook,过程如下: sudo pip3 install ipython[all]这样就安装了pytho ...
- 对CountDownLatch的初步学习
CountDownLatch的中文翻译为"闭锁",在JDK1.5中 CountDownLatch类加入进来.为程序猿进行并发编程提供有利的帮助. 首先我们先看看JDK文档中对于Co ...
- ios多播委托
在现实中回调的需求也分两种 一对一的回调. 一对多的回调. 对于一对一的回调,在IOS中使用delegate.block都能实现.而一对多的回调基本就是通知中心了. 假如现在有一个需求,我们以图片下载 ...
- centos7 管理开机启动:systemd
一.CentOS7 systemd 介绍 在 CentOS7 中,使用 systemd 来管理其他服务是否开机启动,systemctl 是 systemd 服务的命令行工具 [root@mysql ~ ...