httpHandlers和httpModules接口介绍 (4)

本文介绍了如何在Web.Config文件中配置HttpHandler及其路径设置,通过具体的代码示例展示了如何使用不同的HttpHandler来处理请求,如显示图片和生成验证码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Web.Config配置文件

<httpHandlers>
<add verb="*" path="*" type
="ClassLibrary831.TestHandler,ClassLibrary831"></add>
</httpHandlers>

Verb属性:指定了处理程序支持的HTTP动作。*-支持所有的HTTP动作;“GET”-支持Get操作;“POST”-支持Post操作;“GET, POST”-支持两种操作。

Path属性:指定了需要调用处理程序的路径和文件名(可以包含通配符)。“*”、“*.aspx”、“showImage.aspx”、“test1.aspx,test2.aspx”

Type属性:用名字空间、类名称和程序集名称的组合形式指定处理程序或处理程序工厂的实际类型。ASP.NET运行时首先搜索bin目录中的DLL,接着在GAC中搜索。

这样程序运行的效果是该网站的任何一个页面都会显示worm.jpg图片。如何只让一个页面(default21.aspx)执行HttpHandler中的ProcessRequest方法呢?最简单的办法是在Web.Config文件中把path配置信息设为default21.aspx。

根据这个例子大家可以考虑一下如何编写“验证码”了。

IHttpHandler工厂
IHttpHandlerFactory的作用是对IHttpHandler进行管理。
工厂的作用请见

http://hi.baidu.com/grayworm/blog/item/4a832160f8c9de46eaf8f8c1.html"
IHttpHandlerFactory接口的声明:
public interface IHttpHandlerFactory
{
IHttpHandler GetHandler 
(HttpContext context,string requestType,string url,string pathTranslated);
void ReleaseHandler (IHttpHandler handler);
}

GetHandler返回实现IHttpHandler接口的类的实例,ReleaseHandler使工厂可以重用现有的处理程序实例。

示例:两个用IHttpHandlerFactory来实现对不同HttpHandler的调用。

有两个HttpHandler:将图片显示在页面上的HttpHandler和生成验证码的Handler

//将图片显示在页面上的Handler

class TestHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
FileStream fs = new FileStream
(context.Server.MapPath("worm.jpg"), FileMode.Open);
byte[] b = new byte[fs.Length];
fs.Read(b, 0, (int)fs.Length);
fs.Close();
context.Response.OutputStream.Write(b, 0, b.Length);
}
public bool IsReusable
{
get
{
return true;
}
}
}
//生成验证码的Handler 
class CodeHandler:IHttpHandler
{
public bool IsReusable
{
get
{
return true;
}
}
public void ProcessRequest(HttpContext context)
{
Image b = new Bitmap(50,20);
Graphics g = Graphics.FromImage(b);
SolidBrush sb = new SolidBrush(Color.White);
Font f = new Font("宋体", 12);
string str = "";
Random r = new Random();
for (int i = 0; i < 4; i++)
{
str += r.Next(10);
}
g.DrawString(str,f,sb,0,0);
b.Save(context.Response.OutputStream, 
System.Drawing.Imaging.ImageFormat.Jpeg);
}
}

转载于:https://www.cnblogs.com/sntetwt/archive/2011/03/11/1980393.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值