mvc怎么生成图片验证码
时间: 2023-10-18 07:31:31 浏览: 89
在MVC中生成图片验证码可以使用以下步骤:
1. 安装 NuGet 包 System.Drawing.Common。
2. 创建一个名为 CaptchaController 的控制器。
3. 在控制器类中创建一个名为 GetImage 的 Action 方法。该方法将生成一个包含随机数字或字母的图像,并将该图像作为响应返回给客户端。
以下是示例代码:
```csharp
using System;
using System.Collections.Generic;
using System.Drawing;
using System.Drawing.Imaging;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace MvcApplication.Controllers
{
public class CaptchaController : Controller
{
public ActionResult GetImage()
{
// 生成随机验证码字符串
string captchaText = GenerateRandomCaptcha();
// 将验证码字符串保存到 Session 中
Session["CaptchaText"] = captchaText;
// 生成验证码图像
Image captchaImage = GenerateCaptchaImage(captchaText);
// 将图像作为响应返回给客户端
return new FileStreamResult(ImageToStream(captchaImage), "image/png");
}
private string GenerateRandomCaptcha()
{
// 生成随机字符串
string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
Random random = new Random();
string captchaText = new string(
Enumerable.Repeat(chars, 6)
.Select(s => s[random.Next(s.Length)])
.ToArray());
return captchaText;
}
private Image GenerateCaptchaImage(string text)
{
// 创建位图
Bitmap bmp = new Bitmap(120, 40, PixelFormat.Format32bppArgb);
// 创建绘图对象
Graphics g = Graphics.FromImage(bmp);
g.SmoothingMode = System.Drawing.Drawing2D.SmoothingMode.HighQuality;
g.Clear(Color.White);
// 创建字体和画刷
Font font = new Font("Arial", 20, FontStyle.Bold);
Brush brush = new SolidBrush(Color.Black);
// 绘制字符串
g.DrawString(text, font, brush, new PointF(10, 5));
// 添加噪声
Random random = new Random();
for (int i = 0; i < 30; i++)
{
int x = random.Next(bmp.Width);
int y = random.Next(bmp.Height);
bmp.SetPixel(x, y, Color.FromArgb(random.Next(256), random.Next(256), random.Next(256)));
}
// 释放资源
g.Dispose();
return bmp;
}
private Stream ImageToStream(Image image)
{
MemoryStream ms = new MemoryStream();
image.Save(ms, ImageFormat.Png);
ms.Seek(0, SeekOrigin.Begin);
return ms;
}
}
}
```
4. 在视图中使用 HtmlHelper 和 UrlHelper 生成验证码图像的 URL,并将其显示在页面上。
以下是示例代码:
```html
<div>
<img src="@Url.Action("GetImage", "Captcha")" alt="Captcha Image" />
</div>
```
注意:这只是一个简单的示例,实际上还需要更多的安全措施来防止恶意攻击。例如,可以使用一些技术来防止自动化攻击,如限制每个 IP 地址的请求速率,防止暴力破解等。
阅读全文