C# 在MVC3.0及更高版本中实现验证码

C# 在MVC3.0及更高版本中实现验证码,c#,asp.net-mvc,asp.net-mvc-3,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 3,Asp.net Mvc 4,我在mvc 4.0应用程序和我的参考资料中使用了captcha: 但它是基于MVC2.0实现的,它显示了一个图像,但在控制器中我没有任何OnPreAction方法,我用OnAuctionExcuting替换它,但其中没有MethodInfo。如何更新代码以在mvc 3.0或4.0上运行?只需使用Nuget获取Recaptcha包,然后执行以下操作: 在Microsoft ASP.NET MVC项目中,有一个专业编写的库,名为.NET的Recaptcha,用于使用captcha。您可以从Nuget

我在mvc 4.0应用程序和我的参考资料中使用了captcha:


但它是基于MVC2.0实现的,它显示了一个图像,但在控制器中我没有任何OnPreAction方法,我用OnAuctionExcuting替换它,但其中没有MethodInfo。如何更新代码以在mvc 3.0或4.0上运行?

只需使用Nuget获取Recaptcha包,然后执行以下操作:


在Microsoft ASP.NET MVC项目中,有一个专业编写的库,名为.NET的Recaptcha,用于使用captcha。您可以从Nuget软件包()安装它:

PM>安装软件包RecaptchaNet

安装后,只需按照以下位置的逐步说明进行操作:


有一个类似于reCaptcha的captcha控件。你可以用这个。真的很好。
Razor MVC4 ASP.Net-C中的验证码#

Index.cshtml 上面的CaptchaImageResult()将实例化一个图像对象 创建模型

captchaimagesult.cs
我不想要剃须刀引擎,我只想要上面链接上的验证码,如果你再看看我的问题,谢谢。我只需要将它转换成mvc 3.0或更高版本。@kamiar3001-它没有什么特别之处,只需在webforms中做同样的事情。NuGet Google reCAPTCHA V2 for mvc 4和5--
@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>
public class HomeController : BaseController
{
 public CaptchaImageResult ShowCaptchaImage()
    {
        return new CaptchaImageResult();
    }
}
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(); 

    }  

}
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; }
}