在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. vs2008C1902程序数据库管理不匹配

    大清早打开vs2008,出现这么诡异的错, 删了一个dll的就好了.如图

  2. ※交换排序(1)——快速排序(quick sort)

    快速排序使用分治策略(Divide and Conquer)来把一个序列分为两个子序列.步骤为: 从序列中挑出一个元素,作为"基准"(pivot). 把所有比基准值小的元素放在基准 ...

  3. anaconda安装python三方包,以tensorflow为例

    Anaconda概述 Anaconda是一个用于科学计算的Python发行版,支持 Linux, Mac, Windows系统,提供了包管理与环境管理的功能,可以很方便地解决多版本python并存.切 ...

  4. bzoj2194

    http://www.lydsy.com/JudgeOnline/problem.php?id=2194 卷积... 卷积并不高深,其实卷积就是两个多项式相乘的系数,但是得满足一点条件,就是f[n]= ...

  5. PCB MongoDB 索引

    在索引在数据库中非常重要,当然在MongoDB也是一样啦. 一.获取索引 db.ppeflow.getIndexes() 初始化,每个集都默认_id字段为主键objectid,索引名为_id_ 二.创 ...

  6. codevs1225八数码难题(搜索·)

    1225 八数码难题  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond 题解       题目描述 Description Yours和zero在研究A*启 ...

  7. max_allowed_packet设置问题

    最近在运行的项目出现了一个线上事故,有人反映商城的东西下不了单了,到后台看了一下,果然报了一个错 Cause: com.mysql.jdbc.PacketTooBigException: Packet ...

  8. 微信小程序连接Java后台

    有人问我小程序怎么连后台,这里直接贴代码 在app.js里 // api request request(url, params) { return new Promise((resolve, rej ...

  9. Windows(7/8/10)搭建Elasticsearch 6.x版本

    今天公司用到了Elasticsearch ,记录一下单机版搭建的流程. 首先我们来看下什么是Elasticsearch : ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分 ...

  10. ibatis 基类生成

    using IBatisNet.Common.Utilities; using IBatisNet.DataMapper; using IBatisNet.DataMapper.Configurati ...