zoukankan      html  css  js  c++  java
  • ashx dynamic

    做一个功能就是生成图片,当然有很多方法,生成图片放在服务器的某个目录下面,隔一段时间就删除,图还得自己画,嫌麻烦,结果找着这样一段代码,今天看到使用.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 ();
      
       }
       }
      }
  • 相关阅读:
    RabbitMq、ActiveMq、ZeroMq 和 kafka 比较
    Mysql:The table‘xxxx’is full
    忘记了MariaDB root密码的解决办法
    在CentOS 7 MySQL / MariaDB
    SQL批量删除与批量插入
    org.springframework.web.servlet.PageNotFound No mapping found for HTTP request with URI [/AssetRepair/assetRepairController/test.do] in DispatcherServlet with name 'assetrepair'
    <spring:message> 标签
    Spring MVC之@RequestParam @RequestBody @RequestHeader 等详解
    实现JMS规范的ActiveMQ
    常见消息队列协议总结
  • 原文地址:https://www.cnblogs.com/hq2008/p/1012342.html
Copyright © 2011-2022 走看看