ashx一般处理程序和HttpHandler
asp.net项目中,使用.ashx的文件(一般处理程序)可以用于处理客户端发送来的请求,并将服务器端的处理结果返回给客户端。它能返回的类型可以是文本、或者图片。有时候,我们可以在项目中使用.cs的文件来干同样的活。但是,直接在浏览器上访问.cs的文件是会被无情的拒绝的。这时候需要在Web.Config中进行配置一下就OK了。
开始写这篇博客前,翻阅了其他资料。发现这个知识点远不是我现在所能写的清楚的。但我想,学习总得有个过程,既然在过程中我知道了这一点,那就记录下来。等到有更深入的了解以后,再去记录那更深层的东西吧。另外,本文中用到的验证码生成的例子,参考Insus.Net博友的一篇博客(Insus.Net),在此表示感谢,阅读他的博客学习到不少知识。
首先在项目中创建一个.ashx结尾的一般处理程序(CreateVerifyCodeHandler.ashx)和一个.cs结尾的类文件(CreateVerifyCode.cs)。再创建一个Html文件,用于展示验证码。Refresh的脚本函数放在RealTime.js脚本文件中,用于刷新验证码图片。html代码如下:
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title></title>
<script type="text/javascript" src="js/jquery-2.0.3.min.js"></script>
<script type="text/javascript" src="js/RealTime.js"></script>
</head>
<body>
<p>从.ashx文件中获取验证码</p>
<img id="ashxValidateCodeImg" src="/Handlers/CreateVerifyCodeHandler.ashx" onclick="Refresh('ashxValidateCodeImg')" />
<hr />
<p>从.cs文件中获取验证码</p>
<img id="csValidateCodeImg" src="/Handlers/CreateVerifyCode.ashx" onclick="Refresh('csValidateCodeImg')" />
</body>
</html>
再看看CreateVerifyCodeHandler.ashx的代码。
public class CreateVerifyCodeHandler : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.Clear();
using (Bitmap b = new Bitmap(, , PixelFormat.Format32bppArgb))
{
using (Graphics g = Graphics.FromImage(b))
{
Rectangle rect = new Rectangle(, , , );
g.FillRectangle(Brushes.White, rect); string drawString = RandomCharacters.GenerateRandomString(); Font drawFont = new Font("Arial", , FontStyle.Italic | FontStyle.Strikeout);
using (SolidBrush drawBrush = new SolidBrush(Color.Black))
{
PointF drawPoint = new PointF(, );
g.DrawRectangle(new Pen(Color.Red, ), rect);
g.DrawString(drawString, drawFont, drawBrush, drawPoint);
}
b.Save(context.Response.OutputStream, ImageFormat.Jpeg);
context.Response.ContentType = "image/jpeg";
context.Response.End();
} }
} public bool IsReusable
{
get
{
return false;
}
}
}
此时,我们可以在浏览器上直接打开浏览该一般处理程序,因为其返回的是一个图片文件。如图:

打开CreateVerifyCodeHandler.ashx文件,发现里面的代码和普通的类程序里面的代码没什么区别。那能不能用一个普通的类文件去干同样的事情呢?所以,我们把代码复制到CreateVerifyCode.cs文件中。以同样的方式,在浏览器中尝试浏览这个.cs文件,看到的结果确实像下面这样。

接下来,打开web.config文件,找到<httpHandler>节,添加下面的配置。
<add verb="*" path="CreateVerifyCode.ashx" type="WebApplication1.Handlers.CreateVerifyCode" validate="false"/>
再次浏览CreateVerifyCode文件,但这个时候需要注意了,我们需要将文件名改为CreateVerifyCode.ashx去访问。否则无法直接浏览.cs结尾的文件。至此,我们也可以直接在浏览器上查看最初创建的Html文件,点击图片也能够刷新验证码了。
ashx一般处理程序和HttpHandler的更多相关文章
- ashx 一般处理程序中使用 Session
项目中,调用 ashx 一般处理程序获取行政区划Json数据,在 ashx 里面有用到Session,但是总无法获取 Session . 查阅资料得知 ashx 一般处理程序要使用 Session,必 ...
- ashx一般处理程序文件用处
今天逛博客园,无意发现一篇好文章,关于ashx文件的使用. 文章一:向服务器发送josn字符串,服务器端解析 本文转载:http://www.cnblogs.com/yzenet/p/3470388. ...
- ASP.NET ASHX 一般处理程序教程
你不想创建一个普通ASP.NET的Web窗体页.而又要通过一个查询字符串返回一个动态的图片.XML或者非HTML网页.这是一个用C#编程语言编写的使用ASHX(一般处理程序)的简单教程. 简介 首先, ...
- ashx一般处理程序
说明: 虽然通过标准的方式可以创建处理程序,但是实现的步骤比较复杂,为了方便网站开发中对处理程序的应用,从Asp.net 2.0开始,asp.net提供了称为一般处理程序的处理程序,允许我们使用 ...
- .net一般处理程序(httphandler)实现文件下载功能
Handler文件代码如下: public class MDMExporterWeb : IHttpHandler { public void ProcessRequest(HttpContext c ...
- asp.net ashx 一般处理程序 使用async await异步直接 copy可用哦
以前一直很懒 碰到ashx要用await异步就绕开 用aspx 或者mvc异步控制器 这次公司需要 我查了国内的文章基本都不能简单copy来处理一堆错关键的过程中函数BeginProcess ...
- Ajax请求ashx一般处理程序实现文件下载
具体功能为,在文件数据列表中选择一行,点击表格上方的下载按钮,下载文件.由于表格中不包含文件路径,只能取到在数据库表中的ID,所以具体实现就是这样:首先点击一行,获取点击的一行数据的ID,用Ajax传 ...
- 使用ashx一般处理程序,读取不到Session的问题
一般的处理程序文件里面是用不了Session的,必须得实现Session接口才可以用. public class RandomCode : IHttpHandler, System.Web.Sessi ...
- AJAX提交到Handler.ashx一般处理程序返回json数据 (字符串拼接方式)
<%@ WebHandler Language="C#" Class="Handler" %> using System; using System ...
随机推荐
- swift学习一:介绍,开发文档下载
在今天wwdc2014公布会上.苹果今天公布了全新的编程语言Swift以及新版Xcode.对于开发人员来说,Swift包括了非常多开发人员喜欢的功能,能够与Objective-C和C语言共同工作.Sw ...
- Java容器的概要
[Java流输入/输出原理] 在Jaav程序.对于输入数据/输出操作"流"(stream)时尚:J2SDK它提供了多种 各种各样的"流"类,用于获得不同类型的数 ...
- [java面试题]最长的回文字符串中出现确定
<span style="font-family: Arial, Helvetica, sans-serif;">package com.wzw.util;</s ...
- Java多线程的wait(),notify(),notifyAll()
在多线程的情况下.因为多个线程与存储空间共享相同的过程,同时带来的便利.它也带来了访问冲突这个严重的问题. Java语言提供了一种特殊的机制来解决这类冲突,避免同一数据对象由多个线程在同一时间访问. ...
- 使用Spring的@Autowired 实现DAO, Service, Controller三层的注入(转)
简述: 结合Spring和Hibernate进行开发 使用@Autowired实现依赖注入, 实现一个学生注册的功能,做一个技术原型 从DAO(Repository) -> Service -& ...
- [Python网络编程]gevent httpclient以及网页编码
之前看到geventhttpclient这个项目,https://github.com/gwik/geventhttpclient,官方文档说非常快,因为响应使用了C的解析,所以我一直想把这玩意用到项 ...
- HTML学习_01
html总结 html是一门标记语言,也就是不经过编译就能直接执行的语言,不像是c/c++/java等等须要转换成二进制码, html是一门最主要的学科,提供了一个框架,提供了各种标签和规则,使得语言 ...
- IOS设计模式学习(11)中介者
1 前言 面向对象的设计鼓励把行为分散到不同对象中.这种分散可能导致对象之间的相互关联.在最糟糕的情况下,所有对象都彼此了解并相互操作.但是增加的相互关联又减少了获得的益处.增加的关联似的对象很难或不 ...
- 主机Window不能访问该虚拟机Linux Samba文件服务提供了一个文件夹
我最近遇到一个问题.虚拟机Linux中间Samba服务常开.主办"\\192.168.229.200" (我的虚拟机Linux址)訪问不了Share文件夹(/var/test),并 ...
- 网页信息抓取进阶 支持Js生成数据 Jsoup的不足之处
转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/23866427 今天又遇到一个网页数据抓取的任务,给大家分享下. 说道网页信息抓取 ...