HTTP处理器的实现与应用

HTTP处理器是.NET框架中用于处理HTTP请求的组件。它们实现了System.Web.IHttpHandler接口,并且可以直接通过URL中的文件名被调用。HTTP处理器主要实现了两个方法:ProcessRequest和IsReusable。ProcessRequest用于处理HTTP请求,而IsReusable则指示该处理器实例是否可以被重用来处理相同类型的其他请求。

创建HTTP处理器

.NET网站中,可以通过添加新项来创建一个通用处理器,并命名为ImageHandler.ashx。以下是ImageHandler.ashx文件的示例代码:

<%@ WebHandler Language="C#" Class="ImageHandler" %> using System; using System.Web; using System.IO; using System.Drawing; using System.Drawing.Imaging; public class ImageHandler : IHttpHandler { public void ProcessRequest(HttpContext context) { string sImageFileName = ""; int iThumbSize = 0; decimal dHeight, dWidth, dNewHeight, dNewWidth; sImageFileName = context.Request.QueryString["img"]; iThumbSize = Convert.ToInt32(context.Request.QueryString["sz"]); string imagePath = Server.MapPath("Images/" + sImageFileName); Image objImage = Image.FromFile(imagePath); if (sImageFileName != null) { if (iThumbSize == 1) { dHeight = objImage.Height; dWidth = objImage.Width; dNewHeight = 120; dNewWidth = dWidth * (dNewHeight / dHeight); objImage = GetResizedImage(objImage, (int)dNewWidth, (int)dNewHeight); } else if (iThumbSize == 2) { dHeight = objImage.Height; dWidth = objImage.Width; dNewHeight = 200; dNewWidth = dWidth * (dNewHeight / dHeight); objImage = GetResizedImage(objImage, (int)dNewWidth, (int)dNewHeight); } MemoryStream objMemoryStream = new MemoryStream(); objImage.Save(objMemoryStream, ImageFormat.Jpeg); byte[] imageContent = objMemoryStream.ToArray(); context.Response.ContentType = "image/jpeg"; context.Response.BinaryWrite(imageContent); } } private Image GetResizedImage(Image image, int width, int height) { return new Bitmap(image, new Size(width, height)); } public bool IsReusable { get { return false; } } }

在上述代码中,定义了一个名为ImageHandler的类,该类实现了IHttpHandler接口。ProcessRequest方法用于处理请求,根据查询字符串中的参数生成缩略图。IsReusable属性用于指示处理器是否可以被重用。

使用HTTP处理器

一旦HTTP处理器被创建并部署,就可以在网页中通过指定URL来使用它。例如,如果想显示一个名为"ImageName.jpg"的图片的缩略图,并且希望缩略图的大小为120x120像素,可以使用以下HTML代码:

<img id="Image1" src='../ImageHandler.ashx?img=ImageName.jpg&sz=1' />
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485