.ashx 解析

article/2025/9/25 9:49:36
.ashx 文件用于写web handler的。当然你完全可以用.aspx 的文件后缀。使用 .ashx 可以让你专注于编程而不用管相关的WEB技术。 .ashx必须包含IsReusable. 如下例所示


<% @ webhandler language="C#" class="AverageHandler" %>

using System;
using System.Web;

public class AverageHandler : IHttpHandler
{
public bool IsReusable
{ get { return true; } }
public void ProcessRequest(HttpContext ctx)
{
ctx.Response.Write("hello");
}
}
.ashx比.aspx的好处在与不用多一个html   
注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler。后来查了一下.Net SDK文档,发现Asp.Net1.1也支持.ashx,但是没有给出详细内容。

我们都知道,HttpHandler是一个彻底自定义Http请求的方法,它通过web.config来定义Asp.Net运行时来过滤出要自定义的Http请求,发送到定义在web.config的指定类中。

利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。这个文件特别适合于生成动态图片,生成动态文本等内容。

建立方法如下:
首先打开一个Web项目,然后在任意目录下使用VS2003解决方案资源管理器的“添加”-->“添加新项”,在对话框中选择“文本文件”,然后在文件名处输入“TextBuilder.ashx”。

然后在同目录下,使用解决方案资源管理器,使用“添加”-->“添加类”,在类文件名处输入“TextBuilder.ashx.cs”。可以看出,它的文件命名规律与.aspx文件相同。

然后在.cs文件处输入以下代码(名称空间略):
using System.Web
public sealed class TextBuilder : IHttpHandler
{
    
publicvoid ProcessRequest(HttpContext context)
    
{
         context.Response.ClearContent();
         context.Response.ContentType
="text/plain";
         context.Response.Write(
"Hello World");
         context.Response.End();
     }


    
publicbool IsReusable
    
{
        
get{ returntrue; }
     }

}

然后在“TextBuilder.ashx”文件的第一行处输入上面这个类的调用代码:
<% @ WebHandler language="C#" Class="MyNamespace.TextBuilder" codebehind="TextBuilder.ashx.cs" %>
上面的代码需要注意的是:必须在Class项中输入类的完整名称,即包括名称空间及类名称。

最后保存并编译项目。

使用IE测试,输入这个.ashx的地址即可。

大家可以看出Response类有个OutputStream方法,可以向客户端输出二进制数据流,所以在我的项目中,使用这个方法,在一个.ashx中使用DundasChart控件就可以生成非常好的统计图,用它发送二进制数据,方便快捷,而且不需在web.config内输入任何配置代码。

.ashx文件有个缺点,他处理控件的回发事件非常麻烦,比如说如果用它来生成DataGrid的列表也不是不行,但是处理数据的回发,需要一些.aspx页的功能,只有自己手动处理这些功能。所以,一般使用.ashx,用来输出一些不需要回发处理的项目即可。

利用“一般处理程序”。如果你实用的是vs2005你在添加新项中可以见到“一般处理程序”,它的后缀名为.ashx。它是什么?其实它和.aspx很类似。先问问.aspx是如何工作的?也许你知道,.aspx能处理来自外部传入的请求,然后它还能处理这个请求并生成一个html作为结果返回。这是典型的处理外部请求的方式。.aspx就是专门为处理“典型”的请求而出现的。那么如果我们现在需要一种又能处理外部请求又需要我们自定义的处理这个请求那又要怎么做呢?(也就是不实用“典型”的方式来处理)。.ashx就能帮你做到这一点。

首先你发现 <%@ WebHandler Language="C#" class="ImageHandler" %>这句话。想想一个ASP.NET的页面是不是也有类似的东西。其实它表明了现在的这个文件可以处理一个来自外部的请求。当然就它是不行的。
接下来关键的东西就是底下建立的类,它实现了一个关键的接口:IHttpHandler。实现这个接口表明你现在将以何种方式来处理来自外部的请求。其中有一个方法和属性需要实现,你可以在ProcessRequest方法中编写如何处理请求的细节而IsReusable表明其它的请求是否可以使用这个类的一个实例。我们可以暂时忽略IsReusable属性。将焦点转到ProcessRequest方法上。在ProcessRequest中有一个参数context它是一个HttpContext类型,context对象提供对用于为 HTTP 请求提供服务的内部服务器对象(如 Request、Response、Session 和 Server)的引用。也就是可以访问我们的几大服务器对象。
现在来看个简单的例子。
请在你自己建立的WEB站点文件夹中随便放一个图片。我的想法是这样,我先将一个图片读取成一个二进制的数据然后在将这个二进制的数据转变成一个图片。这其中需要你建立两个文件。一个.ASPX文件和现在我们要实用的.ASHX文件。

文件ImageHandler.ashx

<% @ WebHandler Language = " C# " Class = " ImageHandler " %>

using System;
using System.Web;
///<summary>
/// 这就一个没有任何实现的一般处理程序。
///</summary>
public class ImageHandler : IHttpHandler {

publicvoid ProcessRequest (HttpContext context)
{
//获取虚拟目录的物理路径。
string path = context.Server.MapPath("");
//获取图片文件的二进制数据。
byte[] datas = System.IO.File.ReadAllBytes(path +"\\U1513.jpg");
//将二进制数据写入到输出流中。
context.Response.OutputStream.Write(datas, 0, datas.Length);
}


publicbool IsReusable {
get{
returnfalse;
}

}


}


default.aspx文件
注意上面的代码:<asp:Image ID="Image1" runat="server" ImageUrl="~/ImageHandler.ashx"/></div> 中ImageUrl指向的是ImageHandler.ashx文件。

它一般用于产生供浏览器处理的、不需要回发处理的数据格式,例如用于生成动态图片、动态文本、ajax检测用户名是否可用(ajax其实都适合)等内容。

.ashx初建会有起始代码,其中ContentType用于设置程序的输出类型,这段代码可以在页面上出处一段文本“Hello World”其次ashx文件是可以直接访问的。
注意:
实现HttpHandler得功能就必须实现IHttpHandler接口,而且,任何实现了该接口的类都可以用于处理输入的HTTP请求。
从上面的代码我们可以看到,实现该接口需要实现IsReusable属性和ProcessRequest方法。IsReusable可以用来设置是否可以重用此实例。
ProcessRequest方法是整个HTTP请求最终的处理方法。就是该文件的程序入口点,你可以在这个函数里面处理请求内容,并返回以及其他逻辑。

转载于:https://www.cnblogs.com/czsl/archive/2013/05/18/3085208.html


http://chatgpt.dhexx.cn/article/tGCKn098.shtml

相关文章

再续.ashx

.ashx 文件用于写web handler的。当然你完全可以用.aspx 的文件后缀。使用 .ashx 可以让你专注于编程而不用管相关的WEB技术。 .ashx必须包含IsReusable. 如下例所示 <% webhandler language"C#" class"AverageHandler" %> using System; using Sys…

ASH

我们可以用第三方工具监控数据库&#xff0c;如toad&#xff0c;spotlight&#xff08;我用的是这个&#xff0c;还不错&#xff09;&#xff0c;但是oracl提供的监测数据的工具不可忽视&#xff0c;学会应用会给监控数据带来便捷。下面介绍ASH. ASH:active session history 我…

一般处理程序.ashx

在前面那篇有关智能提示的推荐文章中&#xff0c;作者用到了.ashx文件和jQuery。 说句实话&#xff0c;对于.ashx当时还真是第一次听说&#xff0c; …… 为了弥补自己知识上的缺陷&#xff0c;在网上恶补了一下&#xff0c;终于对此类文件有了一个初步的认识&#xff0c;特别…

一般处理程序.ashx的应用

利用“一般处理程序”。如果你实用的是vs2005你在添加新项中可以见到“一般处理程序”&#xff0c;它的后缀名为.ashx。它是什么&#xff1f;其实它和.aspx很类似。先问问.aspx是如何工作的&#xff1f;也许你知道&#xff0c;.aspx能处理来自外部传入的请求&#xff0c;然后它…

ashx一般处理程序

.NET里面webform的后缀是aspx WCF和WebService的后缀是asmx 然后今天拿到一个客户端代码&#xff0c;调用服务端&#xff0c;服务端后缀是ashx瞬间傻蛋了&#xff0c;.NET我不知道的组件真多。 四个疑问&#xff1a; 1、什么时候用 2、优缺点 3、简单实现机制 4、简单DEM…

ashx和aspx的区别

ashx是什么文件? .ashx 文件用于写web handler的。.ashx文件与.aspx文件类似&#xff0c;可以通过它来调用HttpHandler类&#xff0c;它免去了普通.aspx页面的控件解析以及页面处理的过程。其实就是带HTML和C#的混合文件。 .ashx文件适合产生供浏览器处理的、不需要回发处理的…

ashx 文件怎么用

本文导读&#xff1a;ashx是什么文件,如何创建 .ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。.ashx文件类似于.aspx文件&#xff0c;可以通过它来调用HttpHandler类&#xff0c;从而免去了普通.aspx页面的控件解析以及页面处理的过程。 一、ashx文件的添加 打…

mysql的数据库迁移到另一个机器上

1.先找到迁移服务器上的Data文件&#xff0c;我安装的是mysql5.7&#xff0c;默认安装的路径。那么就是在C:\ProgramData\MySQL文件里面&#xff0c;先把隐藏文件打开。 这个Data文件就是你的数据文件&#xff1b;将你要迁移的数据库文件放到这里如下&#xff1a; 然后打开my.i…

MySQL数据库迁移方案比较和使用

数据库迁移方案 数据迁移&#xff08;Data migration&#xff09;是指在存储类型、格式和计算机系统之间的数据转换。 1 常用的迁移方案介绍 ​ 项目使用的数据存储技术是MySQL&#xff0c;关于MySQL的迁移方案大致分为三类&#xff1a; 1.1 mysqldump命令 mysql提供了对数…

MySQL数据库迁移详细步骤(转)

一、背景简介 1、问题描述 由于机房搬迁&#xff0c;需要对后台DB服务器进行迁移&#xff0c;同时为了保证在数据迁移过程中&#xff0c;对线上业务不造成影响&#xff0c;并能够做到秒级切换。如果我们采用普通的逻辑备份&#xff0c;比如&#xff1a;mysqldump&#xff0c;会…

【转载】MySQL数据库迁移详细步骤

【转载】http://sofar.blog.51cto.com/353572/1598364 一、背景简介 1、问题描述 由于机房搬迁&#xff0c;需要对后台DB服务器进行迁移&#xff0c;同时为了保证在数据迁移过程中&#xff0c;对线上业务不造成影响&#xff0c;并能够做到秒级切换。如果我们采用普通的逻辑备…

MYSQL数据库迁移到ORACLE数据库

一、环境和需求 1、环境 Mysql数据库服务器&#xff1a; OS version&#xff1a;linux 5.3 for 64 bit Mysql Server version: 5.0.45 Oracle数据库服务器&#xff1a; OS version&#xff1a;linux 5.3 for 64 bit Oracle version&#xff1a;oracle 11g r2 2、需求 把mysq…

MySQL数据库迁移到ORACLE(持续更新)

1. 使用Oracle SQL Developer 官方 SQL Developer 23.1下载 选择Windows 64-bit with JDK 11 included安装 2.下载后解压&#xff0c;选择exe执行启动&#xff0c;启动后见图 3. 创建连接 默认支持创建Oracle连接&#xff08;见下图&#xff09;&#xff0c;第三方连接需导入…

Linux下MySQL数据库迁移

默认安装的MySQL数据库的数据库目录为&#xff1a;/var/lib/mysql&#xff0c;使用一段时间后发现硬盘空间已经不能满足我们的使用需求&#xff0c;所以需要迁移数据库到磁盘空间更大的目录下&#xff0c;具体过程如下&#xff1a; 1、备份数据库 虽然迁移理论上不会出现问题…

MySQL数据库迁移详细步骤

转载自&#xff1a;http://sofar.blog.51cto.com/353572/1598364 一、背景简介 1、问题描述 由于机房搬迁&#xff0c;需要对后台DB服务器进行迁移&#xff0c;同时为了保证在数据迁移过程中&#xff0c;对线上业务不造成影响&#xff0c;并能够做到秒级切换。如果我们采用普…

mysql数据库迁移到达梦数据库

说明:在windowns上安装达梦数据库&#xff0c;并从mysql5.7迁移到达梦数据库8&#xff0c;此处使用的是达梦数据库的试用版本&#xff0c;如果要安装标准版或者企业版&#xff0c;可以花钱购买。 下载安装包 从达梦官网下载安装包&#xff0c;下载地址&#xff1a;https://ww…

Mysql数据库迁移问题解决方案

目录 问题描述错误原因解决方案其他问题运行选项问题SQL代码问题旧数据库迁移新数据库问题 问题描述 使用 Navicat 导入之前转储好的 sql 文件&#xff0c;报错 错误原因 1、在信息日志当中往上翻&#xff0c;发现没有选择数据库&#xff0c;所以报错的原因就是没有提前创建…

【MySQL】如何把Windows上的MySQL数据库迁移到Linux服务器上

目录 1. 前言2. 物理备份与逻辑备份3. mysqldump实现逻辑备份4. 逻辑恢复 1. 前言 最近在学黑马的《瑞吉外卖》&#xff0c;前期的基础版本一致在 Windows 电脑上开发&#xff0c;包括 MySQL 数据库也是安装在 Windows 电脑上。最近才学到优化篇&#xff0c;安装了 Linux 虚拟…

MySQL数据库迁移(数据文件直接迁移)

MySQL数据库迁移 MySQL数据库迁移(数据文件直接迁移) 在今年10月下旬的时候&#xff0c;公司的服务器需要迁移&#xff0c;其中涉及到了MySQL数据库迁移。查看了一下MySQL数据文件的大小&#xff0c;接近60G的大小(实际数据并没用那么多)。由于服务器上业务需要&#xff0c;要尽…

mysql——数据库之间的迁移

今天继续给大家分享mysql数据库的知识 不同数据库之间的迁移 不同数据库之间迁移是指从其他类型的数据库迁移到MySQL数据库&#xff0c;或者从MySQL数据库迁移到其他类型的数据库。例如&#xff0c;某个网站原来使用Oracle数据库&#xff0c;因为运营成本太高等诸多原因&…