ashx是什么⽂件,什么时候使⽤ashx
.ashx应⽤:
处理⽣成动态图⽚、⽣成动态⽂本等不需要回传处理的任务
处理ajax请求
可以⽤ashx⽂件创建web 服务。类似web servers 。⽐如传输json格式的数据
轻量的信息交互都可以⽤这个,没有aspx那么复杂的⽣命周期
.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 {为什么要用ajax
public void 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);
}
public bool IsReusable {
get {
return false;
}
}
}
default.aspx⽂件
注意上⾯的代码:<asp:Image ID="Image1" runat="server" ImageUrl="~/ImageHandler.ashx"/></div> 中ImageUrl指向的
是ImageHandler.ashx⽂件。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论