一般处理程序(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)的更多相关文章

  1. 一般处理程序HttpHandler的应用

    ashx 一般处理程序(HttpHandler)是·NET众多web组件的一种,ashx是其扩展名.一个httpHandler接受并处理一个http请求,类比于Java中的servlet.类比于在Ja ...

  2. 使用一般处理程序HTTPHandler下载文件

    一般来说我们可以用HTTPHandler来处理一些简单的逻辑,比如验证码.下载文件等. 以下载word文档为例讲解一下如何在HHTPHandler中下载文件,不限于word文档,如果下载其他文件,需要 ...

  3. EasyUI - 使用一般处理程序 HttpHandler (.ashx)

    以easyui中的panel中,使用url加载数据为列. 效果: html代码: <div id="p" style="padding: 10px;"&g ...

  4. 【IHttpHandler】HttpModule,HttpHandler,HttpHandlerFactory简单使用

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

  5. HttpModule,HttpHandler,HttpHandlerFactory

    HttpModule:Http模块,可以在页面处理前后.应用程序初始化.出错等时候加入自己的事件处理程序. HttpHandler:Http处理程序,处理页面请求 HttpHandlerFactory ...

  6. .net-一般处理程序及生命周期

    IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHandler):是 ...

  7. 【.net项目中。。】.net一般处理程序使用方法

    1.基本原理图 IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用. 一般处理程序(HttpHa ...

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

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

  9. asp.net中的路由系统

    ASP.NET MVC重写了ASP.NET管道HttpModule和处理程序HttpHandler.MVC自定义了MvcHandler实现了Controller的激活和Action的执行.但是在请求到 ...

随机推荐

  1. 1.7Oob 继承关系中构造方法的使用

    1:父类中最好要有一个空参数的构造方法,因为默认的构造方法在自定义了构造方法后就不存在了,需要显示的写出来. 若父类中没有空参数的构造方法,则子类必须有自定义的构造方法,且用super()调用父类的构 ...

  2. 对内存分配的理解 自动变量 局部变量 临时变量 外部变量 字符串长度 C语言可以看成由一些列的外部对象构成

    Status ListInsert_Sq(SqList *L,int i,LElemType_Sq e) { LElemType_Sq *newbase; LElemType_Sq *p,*q; if ...

  3. 2016年蓝桥杯省赛A组c++第7题(图论)

    /* 有12张连在一起的12生肖的邮票,规格是3*4,即: 1111 1111 1111 现在你要从中剪下5张来,要求必须是连着的.(仅仅连接一个角不算相连) */ /* 思路: 先将所有五个一组的情 ...

  4. Chap3:文件系统中跳转[The Linux Command Line]

    1 introduce the following commands pwd - Print name of current working directory cd-Change directory ...

  5. [DPI] Cisco Application Visibility and Control

    DPI,可分为三部分: https://blogs.cisco.com/enterprise/cisco-traffic-analysis-encrypted-threat-analytics 知名端 ...

  6. word 使用总结

    1.标题: 开始->标题栏 2.插入目录: 引用---->更新目录 3.保持分页:页面布局->分隔符->分页符

  7. SYSAUX表空间如何清理

    ############################################################ 操作方案################################### ...

  8. sql-server数据库常用语句

    查看所有数据库名 select name from master..Sysdatabases order by name; 查看当前数据所有表 select name from sysobjects ...

  9. git push error:error: insufficient permission for adding an object to repository database ./object解决

    在服务器代码库xxx.git文件夹中:1.sudo chmod -R g+ws *2.sudo chgrp -R mygroup * //mygroup是该文件夹的所有组3.git repo-conf ...

  10. (1.16)mysql server优化之buffer pool

    (1.16)mysql server优化之buffer pool 1.innodb buffer pool 查看 show status like  'Innodb_buffer_pool_%'; 该 ...