ashx

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

大概去年九月的时候,做一个功能就是生成图片,当然有很多方法,生成图片放在服务器的某个目录下面,隔一段时间就删除,图还得自己画,嫌麻烦,结果找着这样一段代码,今天看到使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法。突然发现这种用法讨论的很好,也许是没怎么详细介绍它的官方中文文档吧,并且推荐另外一种方法代替。

// ----------------------------------------
// Pick your favorite image format
// ------------------------------
byte[]   byteArr = (byte[]) oChartSpace.GetPicture ("png", 500, 500);
// ----------------------------------------
// Store the chart image in Session to be picked up by an HttpHandler later
// ---------------------------------------
HttpContext      ctx = HttpContext.Current;
string           chartID = Guid.NewGuid ().ToString ();
            
ctx.Session [chartID] = byteArr;
imgHondaLineup.ImageUrl = string.Concat ("chart.ashx?", chartID);

chart.ashx里面就下面一句话

<% @ WebHandler language="C#" class="AspNetResources.Owc.ChartHandler" codebehind="chart.ashx.cs" %>

其实也可以用这个代替

在web.config里面的<system.web>里面加上

<httpHandlers>
   <add verb="*" path="*.ashx" type="AspNetResources.Owc, ChartHandler " validate="false" /> /*ChartHandler   是那个ashx.cs编译后生成的代码Assembly*/
   
   <!--Since we are grabbing all requests after this, make sure Error.aspx does not rely on .Text -->
   <add verb="*" path="Error.aspx" type="System.Web.UI.PageHandlerFactory" />
   

</httpHandlers>

具体使用哪个都无所谓,后一种配置好了就方便一些,不用管路径了,其实这个思想的应用比较知名的在.text里面就已经有了,只不过应用的方向不同。

ashx.cs文件的代码

using System;
using System.Web.SessionState;
using System.IO;
using System.Web;

namespace AspNetResources.Owc
{
public class ChartHandler : IHttpHandler, IReadOnlySessionState
{
         public bool IsReusable
         {
             get { return true; }
         }
    
         public void ProcessRequest (HttpContext ctx)
         {
             string chartID = ctx.Request.QueryString[0];
             Array arr = (Array) ctx.Session [chartID];

             ctx.ClearError ();
             ctx.Response.Expires = 0;
             ctx.Response.Buffer = true;
             ctx.Response.Clear ();

             MemoryStream memStream = new MemoryStream ((byte[])arr);
             memStream.WriteTo (ctx.Response.OutputStream);
             memStream.Close ();

             ctx.Response.ContentType = "image/png";
             ctx.Response.StatusCode = 200;
             ctx.Response.End ();

         }
     }
}

 
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JavaScript(简称JS)是一种脚本语言,常用于网页上的交互效果和动态网页开发。JS具有单线程执行的特性,即一次只能执行一个任务。当任务执行时间过长时,会阻塞用户界面的响应。为了解决这个问题,JS引入了异步编程的概念。 ashx是一种后缀名为.ashx的文件,通常用于处理网页请求。ashx文件内部的代码可以与服务器进行交互,并返回处理结果。JS异步使用ashx文件的目的是为了在与服务器进行通信时不阻塞用户界面。 使用JS异步调用ashx文件时,可以发送AJAX请求。AJAX是一种在不刷新整个网页的前提下,通过在后台与服务器进行少量数据交换的技术。通过AJAX,可以向ashx文件发送请求并获得服务器处理的结果。 JS可以通过XMLHttpRequest对象或者fetch API来发送AJAX请求。具体而言,可以创建一个XMLHttpRequest对象,通过open()方法指定请求的URL,通过send()方法发送请求,通过回调函数处理返回的结果。在这个过程中,JS会异步发送请求给ashx文件,而不会阻塞用户界面的操作。 ashx文件在接收到请求后,可以通过处理参数,与数据库进行交互,进行一些数据处理操作,然后将结果返回给JS。JS再通过回调函数拿到返回的结果,并进行相应的操作。 总之,JS异步调用ashx是为了避免任务阻塞用户界面,通过AJAX方式将请求发送给ashx文件,并通过回调函数获取服务器处理的结果。这样,用户界面可以同时进行其他操作,提高用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值