初识ASP.NET---一般处理程序

简介:

       问题来源:

       今天在敲一个小的demo,利用Jquery实现级联下拉框,敲的过程中发现无论怎么和源码对照都无法显示想要的功能。这才想着原来是没有写后台代码,询问一清同学的时候,他告诉我可以利用ASP.NET的一般处理程序。

       我果然是菜鸟初学者,因为我还没有接触过一般处理程序!

       什么是一般处理程序:

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

       优点:轻量化、效率较高

       创建一个一般处理程序将会生成两个后缀名的文件.ashx和.ashx.cs。ashx里只有一个指令集,没有任何其他代码;ashx.cs就是页面处理代码。如果有大量html,需要通过ashx来拼接字符串或读取模板的方式完成。其中.ashx.cs对应的内容,如以下代码:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
  
namespace web  
{  
    /// <summary>  
    /// Handler 的摘要说明  
    /// </summary>  
    public class Handler : IHttpHandler  
    {  
        public void ProcessRequest(HttpContext context)  
        {  
            context.Response.ContentType = "text/plain";  //表示输出结果类型
            context.Response.Write("Hello World");  //输出结果
        }  
  
        public bool IsReusable  
        {  
            get  
            {  
                return false;  
            }  
        }  
    }  
}  

(1)HttpContext: 请求上下文对象,包含:请求报文对象(HttpRequest),响应报文对象(HttpResponse),服务器帮助类(Server),Session等。

(2)FrameWork在接收到请求后,通过反射技术创建请求路径对应的类的对象,并强制转换成IHttpHandler接口对象(HttpHandler实现了IHttpHandler,之后的转换相当于将子类强转为父类),统一调用ProcessRequest方法处理。
(3)IsReusable属性用来表示在IHttpHandlerFactory对象创建IHttpHandler的时候是否能够将这个Handler存入池中以便重用。

(4)ContentTyp属性是一般处理程序输出响应内容,输出的内容有可能是图片、html等其他页面,浏览器根据响应报文体内容不知道接收到的是什么,需要判断响应报文头里的ContentType来决定将报文体内容作为何种格式的数据来显示。(image/jpeg----表示输出的是图片,text/plain--------表示输出文本)

 

       从上面的代码可以看到,一般处理程序实际上就是一个实现IHttpHandler接口的处理程序类,这个处理程序被ASP.NET直接在系统配置文件映射到了ashx扩展名的请求上。这样,我们就不需要在配置文件中进行配置了。

       具体的用途:

       HttpHandler程序可以完成普通类程序所能完成的大多数任务:

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

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

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

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

           5.调用其他类

 

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Web;  
  
namespace web  
{  
    /// <summary>  
    /// Handler 的摘要说明  
    /// </summary>  
    public class Handler : IHttpHandler  
    {  
        public void ProcessRequest(HttpContext context)  
        {  
            context.Response.ContentType = "text/plain";  //表示输出结果类型
            context.Response.Write("Hello World");  //输出结果
        }  
  
        public bool IsReusable  
        {  
            get  
            {  
                return false;  
            }  
        }  
    }  
}  

       具体的运用:

       下面是利用Jquery实现级联下拉框效果中,需要用一般处理程序获得汽车类型的一般处理程序的代码。

 public class Handler1 : IHttpHandler
    {
        public void ProcessRequest(HttpContext context)
        {
            context.Response.ContentType = "text/plain";
            string strCarName =context.Request["carnameValue"].ToString();
 
            SqlConnection conn = new SqlConnection("server=.;database=car;uid=sa;pwd=123456;");   //定义连接字符串
            conn.Open();     //打开连接
            SqlDataAdapter sdr = new SqlDataAdapter();
            sdr.SelectCommand =new SqlCommand ("selectid,cartype from t_cartype where carnameid='" + strCarName + "'",conn);
 
            DataTable dt = new DataTable();
 
            sdr.Fill(dt);
            string str =DataTableToJson("1", dt);
            context.Response.Write(str);
        }
 
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
}

        总结:

       其实理论知识再好不会用也只会停留在理论层面。而编程又是这么奇怪的一个东西无论别人讲得多么的详细,都比不上自己的一次实践。文中所提到的demo源码,文章最后会附有下载链接。

 

demo源码下载:http://download.csdn.net/detail/senior_lee/7697243

目录
相关文章
|
.NET Android开发 数据格式
Android调用asp.net编写的*.ashx(一般处理程序)获取数据
第一步: asp.net 编写ssjc.ashx using System; using System.
1042 0
|
.NET 开发框架
ASP.NET一般处理程序访问Session问题
我们在使用一般处理程序的时候,访问Session会出现如下错误: 解决方案如下: //引用命名空间 using System.Web.SessionState; //继承IRequiresSessionState接口,拥有Session的读写权限 //继承IReadOnlySe...
710 0
|
Web App开发 .NET 数据安全/隐私保护
一起谈.NET技术,ASP.NET身份验证机制membership入门——项目
  前面说了很多关于membership的内容,感觉内容有点凌乱,内容都是一个个知识点,下面我们通过一个小的项目,来把所有的相关内容串一下。   首先描述一下需求:   我们要做一个最简单的网站。有三类用户:匿名用户,员工,管理员,网站结构如下:        admin目录下的页面只允许admin角色的用户访问,employee目录下的页面只允许emp角色的用户访问。
1084 0
|
Web App开发 前端开发 .NET
一起谈.NET技术,ASP.NET MVC2中Controller向View传递数据的三种方式
  在Asp.net mvc开发中,Controller需要向View提供Model,然后View将此Model渲染成HTML。这篇文章介绍三种由Controller向View传递数据的方式,实现一个DropDownList的显示。
931 0
|
缓存 .NET 数据库
一起谈.NET技术,构建高性能ASP.NET站点之三 细节决定成败
  前言:曾经就因为一个小小的疏忽,从而导致了服务器崩溃了,后来才发现:原来就是因为一个循环而导致的,所以,对“注意细节“这一说法是深有感触。   问题的描述   首先,描述一下故事的背景:(希望大家耐心的故事读完)   在网站中,网页中的分页控件每次显示10条数据,每次点击下一页,就再次去取下一个10条数据。
927 0
|
存储 XML 数据安全/隐私保护
一起谈.NET技术,网络硬盘开发技巧之ASP.NET+XML
  文件传送常用的三种方式FTP、Email及“网上邻居”都在一定程度上实现了文件数据的交流,但它们都主要面向“点对点”的传送,无法实现“一块空间,资源互见”的应用需求,这种基于“点对多”的共享模式需要寻求另外的传输途径,网络硬盘就是一种很好的解决方式。
1013 0
|
Web App开发 前端开发 .NET
一起谈.NET技术,关于技术争论(尤其是ASP.NETWebForms 和 ASP.NETMVC 之争)
  技术争论在博客和twitter里无休止地进行着,这些争论涵盖每个开发人员社区。每个语言,框架,工具,和平台在某个特定的时间都不可避免地会至少有几个争论在进行中。   下面是我多年来对技术争论所做的几个总的观察,以及对一些我最近看到的,尤其是关于ASP.NET Web Forms 和 ASP.NET MVC的最新讨论的一些评论。
1538 1
|
SQL 缓存 .NET
一起谈.NET技术,ASP.NET缓存简介
概述   缓存学术一些的解释是”将常用数据放入易于读取的地方以提高性能”。而对于Asp.net来说,需要被缓存的对象多种多样,包括从数据库中提取出来的数据,以及aspx页面生成的静态页,甚至是编译好的程序集。
1449 0