初识ASP.NET---一般处理程序
问题来源:
今天在敲一个小的demo,利用Jquery实现级联下拉框,敲的过程中发现不管怎么和源代码对比都无法显示想要的功能。
这才想着原来是没有写后台代码,询问一清同学的时候,他告诉我能够利用ASP.NET的一般处理程序。
我果然是菜鸟刚開始学习的人,由于我还没有接触过一般处理程序。
什么是一般处理程序:
一般处理程序:是一个实现System.Web.IHttpHandler接口的特殊类。不论什么一个实现了IHttpHandler接口的类。是作为一个外部请求的目标程序的前提。
(凡是没有实现此接口的类,就不能被浏览器请求。)它由支持ASP.NET的server调用和启动执行。 一个HttpHandler程序负责处理它所相应的一个或一组URL地址的訪问请求,并接收client发出的訪问请求信息(请求报文)和产生响应内容(响应报文)。
长处:轻量化、效率较高
创建一个一般处理程序将会生成两个后缀名的文件.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帮助类(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.获取client通过HTML的Form表单提交的数据和URL參数
2.创建对client的响应消息内容
3.訪问server端的文件系统
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
初识ASP.NET---一般处理程序的更多相关文章
- .net core系列之初识asp.net core
.net core已经发布了2.0版本,相对于1.0的有了很大的完善,最近准备在项目中尝试使用asp.net core,所以就进行了一些简单的研究. 初识asp.net core分为以下几个部分: 1 ...
- ASP.NET -- 一般处理程序ashx
ASP.NET -- 一般处理程序ashx 如果在一个html页面向服务器端请求数据,可用ashx作为后台页面处理数据.ashx适合用作数据后台处理,相当于WebForm中的aspx.cs文件或 ...
- asp.net中处理程序调用HttpContext.Current.Session获取值出错
asp.net中处理程序调用System.Web.HttpContext.Current.Session获取Session时提示错误:未将对象引用设置到对象的实例. 解决办法:在处理程序文件类中实现I ...
- .net mvc 站点自带简易SSL加密传输 Word报告自动生成(例如 导出数据库结构) 微信小程序:动画(Animation) SignalR 设计理念(一) ASP.NET -- WebForm -- ViewState ASP.NET -- 一般处理程序ashx 常用到的一些js方法,记录一下 CryptoJS与C#AES加解密互转
.net mvc 站点自带简易SSL加密传输 因项目需要,传输数据需要加密,因此有了一些经验,现简易抽出来分享! 请求:前端cryptojs用rsa/aes 或 rsa/des加密,后端.net ...
- 初识ASP.NET 5中的Sake与KoreBuild
从github上签出基于ASP.NET 5的MVC 6的源代码进行编译,发现有2个编译命令: build.cmd是针对Windows的编译命令,build.sh是针对Mac/Linux的编译命令,这本 ...
- 初识 Asp.Net内置对象之Server对象
Server对象 Server对象定义了一个于Web服务器相关联的类提供对服务器上的方法和属性的访问,用于访问服务器上的资源. Server对象的常用属性 属性 MarhineName 获取服务器 ...
- asp.net一般处理程序利用反射定位方法
asp.net的一般处理程序我想大家用得都不少,经常会如下如下的代码: using System; using System.Collections.Generic; using System.Lin ...
- asp.net 一般处理程序接收上传文件的问题
在使用Html+ashx处理文件上传时,遇到上传文件超过4M的问题,首先HTML代码如下: <!DOCTYPE html> <html> <head> <me ...
- asp.net ashx处理程序中switch case的替代方案总结
目录 1.用委托字典代替switch...case; 2.利用反射替代switch...case: 3.比较两种方案 4.其他方案 4.说明 5.参考 在开发 asp.net 项目中,通常使用一般处理 ...
随机推荐
- JavaScript判断对象数组中是否存在某个对象【转】
1. 如果要判断数组中是否存在某个元素的话很好判断,直接用数组的indexOf方法就好,存在返回当前索引不存在返回-1 var arr=[1,2,3,4] arr.indexOf(3) arr.ind ...
- $CF1141C Polycarp Restores Permutation$
\(problem\) 这题的大致意思就是已知数值差值 求1-n的排列 如果能构成排列 则输出这个排列.如果不能则输出-1 排列的值都是 大于1 而小于n的 而且没有相同的数字. 这题最关键的是 怎么 ...
- java 重载父类报错 Remove '@override' annotation解决办法
Remove '@override' annotation解决办法 最近刚刚配置了新机器,将原来的代码放在eclipse上执行,总会出现Remove '@override' annotati ...
- 【转】utf-8的中文是一个汉字占三个字节长度
因为看到百度里面这个人回答比较生动,印象比较深刻,所以转过来做个笔记 原文链接 https://zhidao.baidu.com/question/1047887004693001899.html 知 ...
- 【译】x86程序员手册18-6.3.1描述符保存保护参数
6.3 Segment-Level Protection 段级保护 All five aspects of protection apply to segment translation: 段转换时会 ...
- 【译】x86程序员手册13-第5章 内存管理
Chapter 5 Memory Management 内存管理 The 80386 transforms logical addresses (i.e., addresses as viewed b ...
- Linux 配置JDK + MyEclipse
版本:Ubuntu16.04: jdK: Java SE Development Kit 8u102; My Eclipse: 10.6; JDK配置的细致步骤参见此处. 就一点要注意: 请使用代码进 ...
- nagios 安装pnp4nagios插件
Naigos install pnp4nagios 绘图插件 原文地址:http://www.cnblogs.com/caoguo/p/5022230.html [root@Cagios ~]# yu ...
- Centos6.6 安装rsync服务端
一.介绍 在工作中经常遇到代码分发,或者是资料备份,都会用到rsync,配置不算复杂,仅做下记录,安装环境如下: 1) Centos6.6 2) rsync-3.0.6-12.el6.x86_64 3 ...
- Java对象的创建及使用
Java对象的创建及使用 对象是类的具体实例(instance),是真实存在的个体: