一般处理程序(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. Some untracked working tree files would be overwritten by checkout. Please move or remove them before you can checkout. View them

    Some untracked working tree files would be overwritten by checkout. Please move or remove them befor ...

  2. 如何辨别高潜牛人的六个方法,据说源自500强HR

    如果你是一名领导,当老板派下来任务让你招人的时候,你有考虑过怎么招到合适的人么?今天,架构师米洛特意分享一篇优秀的网络文章,据说来自500强的HR,希望对你招人有所帮助. 如何识人是HR及管理者重要的 ...

  3. swift一些常用系统方法的简化使用

    //获取Image func FImage(_ imageName:String) -> UIImage { return UIImage(named:imageName)! } //获取Url ...

  4. 转载:caffe中的Reshape层

    http://blog.csdn.net/terrenceyuu/article/details/76228317 #作用:在不改变数据的情况下,改变输入的维度 layer { name: " ...

  5. css权重计算规则

    1.第一等:代表内联样式,如 style=" ",权值为1000: 2.第二等:代表ID选择器,如 #content,权值为0100: 3.第三等:代表类,伪类和属性选择器,如 . ...

  6. yaml语言在线可视化翻译

    yaml语言在线可视化翻译 https://editor.swagger.io/

  7. finecms如何批量替换文章中的关键词?

    Finecms批量替换文章关键词要怎么操作呢,比如把关键词A换为B?Finecms是免费开源无商业限制的内容管理系统,个人在维护,但二次开发很灵活,我们可以通过开发插件或数据库sql语句来操作,下面就 ...

  8. 百度接口test

    https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Mk2Orf5pqEOXvYR ...

  9. 有关java反射机制 小结

    111111111111 Class<?> cls = Class.forName("包名.类名"); Object o = cls.newInstance(); 22 ...

  10. MRPT编译

    今天尝试编译一下MRPT,主要是为了学习里面的路径规划算法. 自主探索,未知环境探索...... 编译的过程中遇到一个问题就是wxWidgets老是检测不到,让我添加它的root目录.明明wxWidg ...