ashx文件和HttpHandler

article/2025/9/25 9:50:02

ashx文件和HttpHandler

ashx 文件用于写web handler的。.ashx必须包含IsReusable. 如下例所示。}.ashx比.aspx的好处在与不用多一个html 注意了VS2005中Web应用程序项目模板里的Generic Handler 项,发现它是一个.ashx文件,实际上它是一个HttpHandler。利用.ashx文件是一个更好的方法,这个文件类似于.aspx文件,可以通过它来调用HttpHandler类,从而免去了普通.aspx页面的控件解析以及页面处理的过程。然后在同目录下,使用解决方案资源管理器,使用"添加"-->"添加类",在类文件名处输入"TextBuilder.ashx.cs"。使用IE测试,输入这个.ashx的地址即可

.ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.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
{
     public void ProcessRequest(HttpContext context)
     {
         context.Response.ClearContent();
         context.Response.ContentType = "text/plain";
         context.Response.Write("Hello World");
         context.Response.End();
     }

     public bool IsReusable
     {
         get { return true; }
     }
}
然后在“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,用来输出一些不需要回发处理的项目即可。

---------------------------------------------------------------------

什么是HttpHandler

HttpHandler是一个HTTP请求的真正处理中心,也正是在这个HttpHandler容器中,ASP.NET Framework才真正地对客户端请求的服务器页面做出编译和执行,并将处理过后的信息附加在HTTP请求信息流中再次返回到HttpModule中。

IHttpHandler是什么

IHttpHandler定义了如果要实现一个HTTP请求的处理所必需实现的一些系统约定。HttpHandler与HttpModule不同,一旦定义了自己的HttpHandler类,那么它对系统的HttpHandler的关系将是“覆盖”关系。

IHttpHandler如何处理HTTP请求

当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。

对于ASPX页面,ASP.NET Framework在默认情况下是交给System.Web.UI.PageHandlerFactory这个HttpHandlerFactory来处理的。所谓一个HttpHandlerFactory,所谓一个HttpHandlerFactory,是指当一个HTTP请求到达这个HttpHandler Factory时,HttpHandlerFactory会提供出一个HttpHandler容器,交由这个HttpHandler容器来处理这个HTTP请求。

一个HTTP请求都是最终交给一个HttpHandler容器中的ProcessRequest方法来处理的。

图1:ProcessRequest方法

一个简单的HttpHandler容器

通过实现IHttpHandler接口可以创建自定义HTTP处理程序,该接口只包含两个方法。通过调用IsReusable,IHttpHandlerFactory可以查询处理程序以确定是否可以使用同一实例为多个请求提供服务。ProcessRequest方法将HttpContext实例用作参数,这使它能够访问Request和Response内部对象。在一个HttpHandler容器中如果需要访问Session,必须实现IRequiresSessionState接口,这只是一个标记接口,没有任何方法。

示例1:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

using System.Web.SessionState;

 

namespace MyHandler

{

    ///

    /// 目的:实现一个简单的自定义HttpHandler容器

    /// 作者:文野

    /// 联系:stwyhm@cnblogs.com

    ///

    public class MyFirstHandler : IHttpHandler,IRequiresSessionState

    {

        #region IHttpHandler 成员

 

        public bool IsReusable

        {

            get { return true; }

        }

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.Write("

Hello HttpHandler

");

 

            context.Session["Test"] = "测试HttpHandler容器中调用Session";

            context.Response.Write(context.Session["Test"]);

        }

 

        #endregion

    }

}

在Web.config中加入如下配置:

<httpHandlers>

     <add verb="*" path="*" type="MyHandler.MyFirstHandler, MyHandler"/>

< span>httpHandlers>

    IHttpHandler工厂

    ASP.NET Framework实际不直接将相关的页面资源HTTP请求定位到一个其内部默认的IHttpHandler容器之上,而定位到了其内部默认的IHttpHandler工厂上。IHttpHandler工厂的作用是对IHttpHandler容器进行调度和管理。

    IHttpHandlerFactory接口包含两个方法。GetHandler返回实现IHttpHandler接口的类的实例,ReleaseHandler使工厂可以重用现有的处理程序实例。

    示例2:

示例2:

using System;

using System.Collections.Generic;

using System.Text;

using System.Web;

 

namespace MyHandler

{

    public class MyHandlerFactory : IHttpHandlerFactory

    {

        #region IHttpHandlerFactory 成员

 

        public IHttpHandler GetHandler(HttpContext context, string requestType, string url, string pathTranslated)

        {

            string fname = url.Substring(url.IndexOf('/') + 1);

            while (fname.IndexOf('/') != -1)

                fname = fname.Substring(fname.IndexOf('/') + 1);

            string cname = fname.Substring(0, fname.IndexOf('.'));

            string className = "MyHandler." + cname;

 

            object h = null;

 

            try

            {

                // 采用动态反射机制创建相应的IHttpHandler实现类。

                h = Activator.CreateInstance(Type.GetType(className));

            }

            catch (Exception e)

            {

                throw new HttpException("工厂不能为类型"+cname+"创建实例。",e);

            }

 

            return (IHttpHandler)h;

        }

 

        public void ReleaseHandler(IHttpHandler handler)

        {

           

        }

 

        #endregion

    }

 

    public class Handler1 : IHttpHandler

    {

        #region IHttpHandler 成员

 

        public bool IsReusable

        {

            get { return true; }

        }

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.Write("

来自Handler1的信息。

");

 

        }

 

        #endregion

    }

 

    public class Handler2 : IHttpHandler

    {

        #region IHttpHandler 成员

 

        public bool IsReusable

        {

            get { return true; }

        }

 

        public void ProcessRequest(HttpContext context)

        {

            context.Response.Write("

来自Handler2的信息。

");

 

        }

 

        #endregion

    }

}

 


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

相关文章

*.ashx文件

*.ashx文件 .ashx 文件用于写web handler的。其实就是带HTML和C#的混合文件。当然你完全可以用.aspx 的文件后缀。使用.ashx 可以让你专注于编程而不用管相关的WEB技术。.ashx必须包含IsReusable. 如下例所示 <% webhandler language"C#" class"AverageHan…

[ASP.Net ]利用ashx搭建简易接口

创建接口的方式有很多&#xff0c;像是Web api,nodejs等等 今天&#xff0c;主要介绍&#xff0c;利用ashx的方式&#xff0c;来搭建一个简易的api 首先&#xff0c;利用VS编辑器&#xff0c;创建一个空的web应用程序 生成的项目文件 为此程序&#xff0c;添加一个新项&a…

孚盟云 AjaxMethod.ashx SQL注入漏洞

漏洞描述&#xff1a; 孚盟云 AjaxMethod.ashx文件存在SQL注入漏洞&#xff0c;攻击者通过漏洞可获取服务器权限。 漏洞利用条件: / 漏洞影响范围&#xff1a; / 漏洞复现&#xff1a; 1.登录页面 2.poc&#xff1a;/Ajax/AjaxMethod.ashx?actiongetEmpByname&Name…

.ashx 解析

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

再续.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…