Реализация 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

после установки, просто следуйте пошаговым инструкциям из следующего местоположения:

http://recaptchanet.codeplex.com/documentation


существует элемент управления 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; }
}