Реализация CAPTCHA в mvc 3.0 и последнем
Я использовал captcha в приложении MVC 4.0 и мою ссылку:Asp.Net MVC CAPTCHA
но он реализует базу на MVC 2.0, он показывает изображение, но в контроллере у меня нет метода OnPreAction, я заменяю его на OnAuctionExcuting, но в нем нет MethodInfo. как я могу обновить код для запуска на mvc 3.0 или 4.0 ?
4 ответов
просто используйте Nuget, чтобы получить пакет Recaptcha, затем следуйте этому:
http://www.tkglaser.net/2011/10/google-recaptcha-in-aspnet-mvc-3-using.html
существует профессионально написанная библиотека для использования captcha в Microsoft ASP.NET проект MVC называется Recaptcha for .Сеть. Вы можете установить его из пакета Nuget (Recaptcha для пакета .NET Nuget):
PM> установить пакет RecaptchaNet
после установки, просто следуйте пошаговым инструкциям из следующего местоположения:
существует элемент управления captcha, похожий на reCaptcha. Вы можете использовать это. Это действительно хорошо. http://supercaptcha.codeplex.com
Captcha в бритве MVC4 ASP.Net -C#
.cshtml по@model Test.Models.LoginModel
@{
ViewBag.Title = "Home Page";
}
<section id="loginForm">
@using (Html.BeginForm("Login", "Account"))
{
<p><img src='@Url.Action("ShowCaptchaImage","Home")' alt="Case Sensitive"/>
</p>
<p><span class="requiredField">* </span>
<label>Please enter the string as shown above</label></p>
<p>@Html.TextBox("CaptchaText")</p>
<input type="submit" value="Login" />
}
</section>
в приведенном выше коде Источник изображения вызовет действие ShowCaptchaImage в Home controller
HomeController.cs
public class HomeController : BaseController
{
public CaptchaImageResult ShowCaptchaImage()
{
return new CaptchaImageResult();
}
}
приведенный выше CaptchaImageResult () создаст экземпляр объекта image Создать модель
CaptchaImageResult.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace test.Models
{
public class CaptchaImageResult : ActionResult
{
public string GetCaptchaString(int length)
{
int intZero = '1';
int intNine = '9';
int intA = 'A';
int intZ = 'Z';
int intCount = 0;
int intRandomNumber = 0;
string strCaptchaString = "";
Random random = new Random(System.DateTime.Now.Millisecond);
while (intCount < length)
{
intRandomNumber = random.Next(intZero, intZ);
if (((intRandomNumber >= intZero) && (intRandomNumber <= intNine) || (intRandomNumber >= intA) && (intRandomNumber <= intZ)))
{
strCaptchaString = strCaptchaString + (char)intRandomNumber;
intCount = intCount + 1;
}
}
return strCaptchaString;
}
public override void ExecuteResult(ControllerContext context)
{
Bitmap bmp = new Bitmap(100, 30);
Graphics g = Graphics.FromImage(bmp);
g.Clear(Color.Navy);
string randomString = GetCaptchaString(6);
context.HttpContext.Session["captchastring"] = randomString;
//add noise , if dont want any noisy , then make it false.
bool noisy = true;
if (noisy)
{
var rand = new Random((int)DateTime.Now.Ticks);
int i, r, x, y;
var pen = new Pen(Color.Yellow);
for (i = 1; i < 10; i++)
{
pen.Color = Color.FromArgb(
(rand.Next(0, 255)),
(rand.Next(0, 255)),
(rand.Next(0, 255)));
r = rand.Next(0, (130 / 3));
x = rand.Next(0, 130);
y = rand.Next(0, 30);
int m = x - r;
int n = y - r;
g.DrawEllipse(pen, m, n, r, r);
}
}
//end noise
g.DrawString(randomString, new Font("Courier", 16), new SolidBrush(Color.WhiteSmoke), 2, 2);
HttpResponseBase response = context.HttpContext.Response;
response.ContentType = "image/jpeg";
bmp.Save(response.OutputStream, ImageFormat.Jpeg);
bmp.Dispose();
}
}
}
В LoginModel
LoginModel.cs
public class LoginModel
{
[Required]
[Display(Name = "Email Address:")]
public string Email { get; set; }
[Required]
[DataType(DataType.Password)]
[Display(Name = "Password:")]
public string Password { get; set; }
public bool IsAuthenticated { get; set; }
[Required]
public string CaptchaText { get; set; }
}