zoukankan      html  css  js  c++  java
  • ashx是什么文件,如何创建(转载)

    转载自:http://hi.baidu.com/greatmaster/blog/item/abc741f006d980c07831aa18.html
    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 ();

             }
         }
    }

  • 相关阅读:
    [ python ] 线程的操作
    [ python ] 进程的操作
    RabbitMQ 集群
    RabbitMQ 实践及使用
    RabbitMQ 基础知识
    [ python ] FTP作业进阶
    [ python ] 项目一:FTP程序
    [ python ] 网络编程(2)
    [ python ] 网络编程(1)
    Linux 日志系统及分析
  • 原文地址:https://www.cnblogs.com/wenjie/p/1630734.html
Copyright © 2011-2022 走看看