ashx文件的使用小结

来源:互联网 发布:淘宝金冠女装店铺大全 编辑:程序博客网 时间:2024/05/27 20:06

一提到ashx文件,我们就会想到http handler以及图片加载(在之前我们一般使用ASPX或者Webservice去做),一般做法如下:
Handler.ashx
代码如下:

<%@ WebHandler Language="C#" Class="Handler" %>using System;using System.IO;using System.Web;public class Handler : IHttpHandler {public bool IsReusable {  get {   return true;  }}public void ProcessRequest (HttpContext context) {  context.Response.ContentType = "image/jpeg";  context.Response.Cache.SetCacheability(HttpCacheability.Public);  context.Response.BufferOutput = false;  PhotoSize size;  switch (context.Request.QueryString["Size"]) {   case "S":    size = PhotoSize.Small;    break;   case "M":    size = PhotoSize.Medium;    break;   case "L":    size = PhotoSize.Large;    break;   default:    size = PhotoSize.Original;    break;  }  Int32 id = -1;  Stream stream = null;  if (context.Request.QueryString["PhotoID"] != null && context.Request.QueryString["PhotoID"] != "") {   id = Convert.ToInt32(context.Request.QueryString["PhotoID"]);   stream = PhotoManager.GetPhoto(id, size);  } else {   id = Convert.ToInt32(context.Request.QueryString["AlbumID"]);   stream = PhotoManager.GetFirstPhoto(id, size);  }  if (stream == null) stream = PhotoManager.GetPhoto(size);  const int buffersize = 1024 * 16;  byte[] buffer = new byte[buffersize];  int count = stream.Read(buffer, 0, buffersize);  while (count > 0) {   context.Response.OutputStream.Write(buffer, 0, count);   count = stream.Read(buffer, 0, buffersize);  }}}

*.aspx:

<img src="myHttpHander.ashx?id=123" width="20" height="20" />

我们变通以下,发现其实除了可以输出图片以外,还可以输出文字:
Handler.ashx:
代码如下:

<%@ WebHandler Language="C#" Class="Handler" %>using System;using System.Web;public class Handler : IHttpHandler {    public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/plain";        context.Response.Write("alert('hi')");    }    public bool IsReusable {        get {            return false;        }    }}

*.aspx:
弹出alert

也可以把.ashx当成css文件

xml文件
orderDoc.load(“Handler.ashx”);

还可以嵌入文字:
Handler.ashx:
代码如下:

<%@ WebHandler Language="C#" Class="TestHandler" %>using System;using System.Web;public class TestHandler : IHttpHandler {    public void ProcessRequest (HttpContext context) {        context.Response.ContentType = "text/plain";        context.Response.Write("document.write(\"Hello World\");");    }    public bool IsReusable {        get {            return false;        }    }}

*.aspx:

using System;using System.Web;using System.Web.SessionState;public class DownloadHandler : IHttpHandler, IReadOnlySessionState{   public bool IsReusable { get { return true; } }   public void ProcessRequest(HttpContext ctx)   {       ctx.Response.Write(ctx.Session["fred"]);   }}

其实,学习的思路不应该这样,以上除了图片外,我们都用偏了,为什么用偏了呢,因为软件以简单、实用为主,我们只是把以上纯粹看成可一项技术而没有把它放到软件的地位去考虑:)
具体的用途,大家可以参考Rewirte.dll (这个dll,可以使服务器支持伪静态的)

0 0
原创粉丝点击