一、HttpHandler验证码
创建web项目添加HTTPHandler类继承IHttpHandler和IRequiresSessionState
public void ProcessRequest(HttpContext context)
{
Random rand = new Random();
int len = rand.Next(4, 6);
char[] chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
StringBuilder myStr = new StringBuilder();
for (int iCount = 0; iCount < len; iCount++)
{
myStr.Append(chars[rand.Next(chars.Length)]);
}
string text = myStr.ToString();
Size ImageSize = Size.Empty;
Font myFont = new Font("MS Sans Serif", 20);
// 计算验证码图片大小
using (Bitmap bmp = new Bitmap(10, 10))
{
using (Graphics g = Graphics.FromImage(bmp))
{
SizeF size = g.MeasureString(text, myFont, 10000);
ImageSize.Width = (int)size.Width + 1;
ImageSize.Height = (int)size.Height + 1;
}
}
using (Bitmap bmp = new Bitmap(ImageSize.Width, ImageSize.Height))
{
using (Graphics g = Graphics.FromImage(bmp))
{
g.Clear(Color.White);
using (StringFormat f = new StringFormat())
{
f.Alignment = StringAlignment.Near;
f.LineAlignment = StringAlignment.Center;
f.FormatFlags = StringFormatFlags.NoWrap;
g.DrawString(
text,
myFont,
Brushes.Black,
new RectangleF(
0,
0,
ImageSize.Width,
ImageSize.Height),
f);
}
}
int num = ImageSize.Width * ImageSize.Height * 30 / 100;
for (int iCount = 0; iCount < num; iCount++)
{
int x = rand.Next(ImageSize.Width);
int y = rand.Next(ImageSize.Height);
int r = rand.Next(255);
int g = rand.Next(255);
int b = rand.Next(255);
Color c = Color.FromArgb(r, g, b);
bmp.SetPixel(x, y, c);
}
System.IO.MemoryStream ms = new System.IO.MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
context.Response.ContentType = "image/Gif";
context.Session["CheckCode"] = text;
ms.WriteTo(context.Response.OutputStream);
ms.Close();
}
myFont.Dispose();
}
public bool IsReusable
{
get
{
return false;
}
然后编写视图层代码
<form id="form1" runat="server">
<div>
<table style="width:100%;" border="1" cellspacing="0" cellpadding="0">
<tr>
<td>账号</td>
<td><asp:TextBox ID="txtAccount" runat="server"></asp:TextBox></td>
</tr>
<tr>
<td>密码</td>
<td><asp:TextBox ID="txtPwd" runat="server" TextMode="Password"></asp:TextBox></td>
</tr>
<tr>
<td>验证码</td>
<td>
<asp:TextBox ID="txtCode" runat="server"></asp:TextBox>
<asp:Image ID="Image1" runat="server" ImageUrl="~/VerificationCode.cs" />
<asp:LinkButton ID="LinkButton1" runat="server">刷新</asp:LinkButton>
</td>
</tr>
</table>
<asp:Button ID="btnSubmit" runat="server" Text="提交" style="margin-left:50%; margin-top:2%" OnClick="btnSubmit_Click" />
</div>
<asp:Label ID="lblMessge" runat="server" Text=""></asp:Label>
</form>
在aspx.cs中编写如下代码
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
if (System.Web.HttpContext.Current.Session["CheckCode"] != null)
{
lblMessge.Text = System.Web.HttpContext.Current.Session["CheckCode"] as string;
Console.WriteLine("登录成功");
}
else
{
lblMessge.Text = "验证码不正确";
}
}
最后在Web.config中写配置文件
<system.webServer>
<handlers>
<add verb="*" path="WebApplication2/*.aspx" name="handler" type="WebApplication2.VerificationCode"/>
</handlers>
</system.webServer>
二、HttpHandler实现水印
创建web项目并新建Images文件夹,添加图片
编写HttpHdanler类
public class TestHandler : IHttpHandler
{
//水印图片
private const string WATERMARK_URL = "~/Images/watermark.png";
//图片不存在,默认下显示图片
private const string DEFAULTIMAGE_URL = "~/Images/1.jpg";
public bool IsReusable
{
get { return false; }
}
public void ProcessRequest(HttpContext context)
{
//得到请求图片的物理路径
string imgFilePath = context.Request.MapPath(context.Request.FilePath);
//判断文件是否存在
if (File.Exists(imgFilePath))
{
//根据图片路径实例化图片对象
Image img = Image.FromFile(imgFilePath);
//实例化画布
Graphics g = Graphics.FromImage(img);
//实体化一个字体对象
Font font = new Font("宋体", 12);
//得到画刷对象,颜色为红色
Brush brush = Brushes.Red;
//得到一个点对象,表示画水印的位置
Point point = new Point(0, 0);
//画图
g.DrawString("独家制作", font, brush, point);
//设置响应类型
context.Response.ContentType = "image/jpeg";
//将画好的图片,输出到响应流
img.Save(context.Response.OutputStream, System.Drawing.Imaging.ImageFormat.Jpeg);
//释放资源
img.Dispose();
g.Dispose();
//结束响应
context.Response.End();
}
在视图层添加图片
<div>
<img src="Images/1.jpg" />
<img src="Images/2.jpg" />
<img src="Images/3.jpg" />
</div>
最后在Web.config中写配置文件
<system.webServer>
<handlers>
<add verb="*" path="Images/*.jpg" name="handler" type="_5._4.TestHandler"/>
</handlers>
</system.webServer>