网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > ASP.NET技巧
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
本月文章推荐
.如何在页面之间传递数据量较大的.
..NET正则表达式使用高级技巧之反.
.ASP.NET 2.0防止同一用户同时登陆.
.在asp.net中实现会话状态基础.
.FCKeditor2.2+ASP.NET2.0不完全攻.
..net同站点多虚拟目录下的Sessio.
.ASP.NET2.0的跨页回调.
.aspx网页以HTML形式存储的几个方.
.ASP.NET底层架构探索之进入.NET运.
.asp.net css注释的影响.
.ASP.NET操作IIS中的虚拟目录.
.ASP.NET中用哪种方式表格化数据.
.XML 自定义串行化.
.获取网站的RSS聚合到自己的网页.
.ASP.NET 2.0高级数据处理之主从数.
.ASP.NET中利用cookies保持客户端.
.ASP.NET2.0中用ICallbackEventHa.
.ASP.NET与数据库相关技巧.
.ASP.NET 2.0 Membership.
.ASP.NET 2.0高级数据处理之处理N.

用ashx动态生成文件

发表日期:2005-9-25


大概去年九月的时候,做一个功能就是生成图片,当然有很多方法,生成图片放在服务器的某个目录下面,隔一段时间就删除,图还得自己画,嫌麻烦,结果找着这样一段代码,今天看到使用.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 ();

        }
    }
}

上一篇:asp.net开发wap必备:更好的匹配手机设备 人气:9206
下一篇:windows 2003下asp.Net站点无法使用用户名+密码的方式连接SQLSERVER的问题 人气:9710
浏览全部asp.net的内容 Dreamweaver插件下载 网页广告代码 祝你圣诞节快乐 2009年新年快乐