在VS中右击项目,添加新项,我们找到.ashx文件在新建项模板中叫做“一般处理程序”,那么这个一般处理程序用来干吗的呢?

我们可以这样地简单理解,嗯,不需搞得太复杂,它就类似.aspx文件,用于处理传入到服务器的HTTP请求,但它不会像.aspx文件那样要返回处理结果和大量HTML,它可以返回简单的字符串、图片等。

大家知道,HttpHandle需要在Web.Config文件中进行相应的配置,那么,如果不配置呢?能否直接使用?可以的,来,动手玩玩。

1、在项目中添加一个.ashx文件,并改写默代码,如下:

  1. using System;
  2. using System.Web;
  3. public class imageHandle : IHttpHandler {
  4. public void ProcessRequest (HttpContext context) {
  5. context.Response.ContentType = "image/jpeg";
  6. string imgPath = @"~/images/{0}.jpg";
  7. //根据请求的查询字符串显示对应图片
  8. switch (context.Request.QueryString["id"])
  9. {
  10. case "1":
  11. context.Response.WriteFile(context.Server.MapPath(string.Format(imgPath, "1")));
  12. break;
  13. case "2":
  14. context.Response.WriteFile(context.Server.MapPath(string.Format(imgPath, "2")));
  15. break;
  16. case "3":
  17. context.Response.WriteFile(context.Server.MapPath(string.Format(imgPath, "3")));
  18. break;
  19. default:
  20. //默认显示第一张图片
  21. context.Response.WriteFile(context.Server.MapPath(string.Format(imgPath, "1")));
  22. break;
  23. }
  24. }
  25. public bool IsReusable {
  26. get {
  27. return true;
  28. }
  29. }
  30. }

我简单说一下,这个类,根据请求的查询参数,返回对应的图片,所以,你可以随便准备3张图片做测试。

2、做好.aspx页面。

  1. <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
  2. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml">
  4. <head runat="server">
  5. <title></title>
  6. </head>
  7. <body>
  8. <form id="form1" runat="server">
  9. <div>
  10. <div>
  11. <img id="img" src="data:images/1.jpg" height="300px" />
  12. </div>
  13. <a href="#" onclick="GetImg(1)">1</a>
  14. <a href="#" onclick="GetImg(2)">2</a>
  15. <a href="#" onclick="GetImg(3)">3</a>
  16. </div>
  17. </form>
  18. </body>
  19. </html>
  20. <script type="text/javascript">
  21. function GetImg(index) {
  22. var myImg = document.getElementById('img');
  23. myImg.src = './imageHandle.ashx?id=' + index;
  24. }
  25. </script>

这个例子是这样的,有三个链接,分别为1、2、3,点击后显示对应的图片。

.

我们在不配置Web.Config的情况下应用了HttpHandle,下面我配置一下Web.Config文件。

找到HttpHandlers节,并添加一个节点。

  1. <add verb="*" path="loadimg" type="imageHandle" validate="false"/>

然后,把.aspx页面也改一下。

  1. <script type="text/javascript">
  2. function GetImg(index) {
  3. var myImg = document.getElementById('img');
  4. myImg.src = './loadimg?id=' + index;
  5. }
  6. </script>

这时候,神奇地发现无效了。咋回事呢?是不是没有把文件放进App_Code的原因?

把.ashx文件扔到App_Code目录下,结果发现,还是不行。

于是,我不用.ashx文件,直接新建一个.cs文件,把刚才.ashx里面的C#代码复制过去,并把类名改一下,接着运行。

这回成功了,是不是就说明,在Web.Config中配置的httpHandler对于.ashx中定义的类是无效的?

ASP.NET大闲话:ashx文件有啥用的更多相关文章

  1. ASP.NET的SEO:使用.ashx文件——排除重复内容

    本系列目录 不同的链接指向的页面如果具有大量相同的内容,这种现象就会被称为"重复内容",如果一个网站的重复内容很多,搜索引擎就会认为这个网站的价值不高.所以我们应尽量避免各种重复内 ...

  2. 使用NeatUpload控件实现ASP.NET大文件上传

    使用NeatUpload控件实现ASP.NET大文件上传 一般10M以下的文件上传通过设置Web.Config,再用VS自带的FileUpload控件就可以了,但是如果要上传100M甚至1G的文件就不 ...

  3. asp.net中.ashx文件接参

    如果是在解决方案中的Web项目中创建.ashx文件,没有文件头,不能直接读取到html页面传来的参数值. 用context.Request["参数名"]来获取参数值. 用conte ...

  4. .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 ...

  5. asp.net和js读取文件的MD5值的方法

    前言 文件的md5值,即文件签名,为了验证文件的正确性,是否被恶意篡改等.每个文件有一个唯一的md5值. 最近公司开发的app文件包的校验就有用到文件md5值. 一.asp.net获取 ①和上传文件一 ...

  6. Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现)(转)

    Asp.Net实现无刷新文件上传并显示进度条(非服务器控件实现) 相信通过Asp.Net的服务器控件上传文件在简单不过了,通过AjaxToolkit控件实现上传进度也不是什么难事,为什么还要自己辛辛苦 ...

  7. Ajax跨域请求ashx文件与Webservice文件

    前台页面: <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm1 ...

  8. ashx文件的使用

    转自:http://www.cnblogs.com/Tally/archive/2013/02/19/2916499.html ashx是什么文件 .ashx 文件用于写web handler的..a ...

  9. ASP.NET -- 一般处理程序ashx

    ASP.NET  --   一般处理程序ashx 如果在一个html页面向服务器端请求数据,可用ashx作为后台页面处理数据.ashx适合用作数据后台处理,相当于WebForm中的aspx.cs文件或 ...

随机推荐

  1. JavaScript Patterns 2.4 For-in loop

    Principle Enumeration should be used to iterate over nonarray objects. It's important to use the met ...

  2. mysql中判断记录是否存在方法

    以下这个方法是我推荐的. sql语句:select 1 from tablename where col = col limit 1; 然后读取语句执行所影响的行数. 当然这里limit 1很重要.这 ...

  3. zb的生日-------搜索 和 动态规划

    简单的贪心算法 : http://love-oriented.com/pack/P01.html  说实话 我是喜欢 动态规划的.......但是省赛迫在眉睫 , 只好先 学 搜索了  ,  赶紧   ...

  4. 对于民科吧s5_or吧友自增树的复杂度计算

    原帖 自增树如s5_or所说,是一种思想像Splay的数据结构,每个节点维护一个堆权值,每当询问一个节点时,堆权值++,并返回时维护堆权值为堆的性质.这个树从旋转次数上比Splay小是肯定的,因为Sp ...

  5. js常用操作~~~~将持续更新

    1.替换多个模板变量 var s="my javascript is very poor,who can help me?" var reg=/(\w*)my(.*)is(.*)c ...

  6. centos mysql允许远程root登录

    Mysql为了安全性,在默认情况下用户只允许在本地登录,可是在有此情况下,还是需要使用用户进行远程连接,因此为了使其可以远程需要进行如下操作: 一.允许root用户在任何地方进行远程登录,并具有所有库 ...

  7. [ HNOI 2006 ] 公路修建问题

    \(\\\) \(Description\) 一个\(N\)个点\(M\)条边的图,每条边可以选择\(w_i,p_i\)两个边权之一,现求一个生成树上的最大边权最小值,要求这棵生成树上至少有\(K\) ...

  8. 如何让win32 c++窗口不出现在任务栏

    把窗口作为某一个窗口的子窗口,然后设置WS_POPUP就可以了.使用CreateWindow时的第三个参数设置为WS_CHILD|WS_POPUP.

  9. 【PostgreSQL-9.6.3】事件触发器

    当预定的事件发生时,事件触发器就会被触发.由于事件触发器设计的权限比较大,所以只有超级用户才能创建和修改触发器. 1. 事件触发器支持的事件分三类:ddl_command_start, ddl_com ...

  10. vim之补全2(完全个人定制版)

    关于补全的方面要说的的确很多, 这里选择分为两个章叙述. 如果你想学vim, 你需要有很强的耐心, 如果你想锻炼这种耐心, 你可以试着先看完我之前的文章. 好了, 下面继续我们的vim补全吧. vim ...