HTTP处理器是.NET框架中用于处理HTTP请求的组件。它们实现了System.Web.IHttpHandler接口,并且可以直接通过URL中的文件名被调用。HTTP处理器主要实现了两个方法:ProcessRequest和IsReusable。ProcessRequest用于处理HTTP请求,而IsReusable则指示该处理器实例是否可以被重用来处理相同类型的其他请求。
在.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处理器被创建并部署,就可以在网页中通过指定URL来使用它。例如,如果想显示一个名为"ImageName.jpg"的图片的缩略图,并且希望缩略图的大小为120x120像素,可以使用以下HTML代码:
<img id="Image1" src='../ImageHandler.ashx?img=ImageName.jpg&sz=1' />