MVC de CAPTCHA kullanımı

Web sitelerinin güvenliği için özel bir önlem olan captcha, Botlara karşı önlem olarak kullanılan etkili bir çözümdür.. Hadi gelin işlemi MVC platformu için yapalım. MVC için Nugettte bir eklenti bulunmaktadır..Toolstan Nuget Package Manageri seçin<

Gelen pencerede Browse bölümüne gelin ve captcha yazın ve gelen seçeneklerden aşağıdaki Captchamvc.Mvc5i seçin

Ve sağda açılan pencerede projenizi işaretleyip install butonuna basınız.İşlem bittiğinde artık kütüphane projenize referans edilmiştir.

Şimdi bir proje oluşturalım ben projeme resimkont ismini verdim. Şimdi models klasörüne sağ tıklayıp Add-Add New item dan Code seçeneğini kullanıp girisdeger isimli bir class oluşturun.. Classın içeriği şöyle olsun. Alanların gerekli olduğunu belirttiğim için using bölümüne using System.ComponentModel.DataAnnotations; ifadesini ekledim.

 public class girisdeger
    {
        [Required]
        public string kullaniciadi { get; set; }
        [Required]
        public string sifre { get; set; }
        [Required]
        public string adsoyad { get; set; }
    }

Şimdi Controller klasörüne tıklayıp HomeController oluşturalım ve şu kodları yazalım.Using bölümüme using CaptchaMvc.HtmlHelpers; using resimkont.Models; ifadelerini ekleyelim.

 public ActionResult Index()
        { 
            var aktif = new girisdeger();
            return View("Index", aktif);
        
        }
        [HttpPost]
        public ActionResult Kaydet(girisdeger  aktif)
        {
            if (!ModelState.IsValid)
            {
                return View("Index", aktif);
            }
            else
            {
                if (!this.IsCaptchaValid(""))
                {
                    ViewBag.error = "Hatalı kod";
                    return View("Index", aktif);
                }
                else
                {
                    ViewBag.sonuc = aktif;
                    return View("basarili");
                }
            }
        }
        public ActionResult basarili()
        {
            return View();
        }

index.cshtml sayfamı aşağıdaki gibi tasarladım.

@using CaptchaMvc.HtmlHelpers;
@model  resimkont.Models.girisdeger

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Index</title>
</head>
<body>

    @using (Html.BeginForm("Kaydet", "Home", FormMethod.Post))
    {
        <table>
            <tr>
                <td>Kullanici Adı</td>
                <td>@Html.TextBoxFor(model => model.kullaniciadi)</td>
                <td>
                    @Html.ValidationMessageFor(model => model.kullaniciadi)
                </td>
            </tr>
            <tr>
                <td>Şifre</td>
                <td>@Html.PasswordFor(model => model.sifre)</td>
                <td>
                    @Html.ValidationMessageFor(model => model.sifre)
                </td>
            </tr>
            <tr>
                <td>Ad Soyad</td>
                <td>@Html.TextBoxFor(model => model.adsoyad)</td>
                <td>
                    @Html.ValidationMessageFor(model => model.adsoyad)
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td>
                    @Html.Captcha("","Kodu Giriniz", 5)
                    @*@Html.MathCaptcha()*@
                    <br />
                    @ViewBag.error
                </td>
            </tr>
            <tr>
                <td>&nbsp;</td>
                <td><input type="submit" value="Giriş" /></td>
            </tr>
        </table>
    }
</body>
</html>

Bilgileri doğru girdiğinizde yönlendirdiğim basarili.cshtml sayfası ise ;

<body>
    <h3>Kullanıcı Bilgisi</h3>
    <table border="1" cellpadding="2" cellspacing="2">
        <tr>
            <td>Kullanici Adı</td>
            <td>@ViewBag.sonuc.kullaniciadi</td>
        </tr>
        <tr>
            <td>Şifre</td>
            <td>@ViewBag.sonuc.sifre</td>
        </tr>
        <tr>
            <td>Ad Soyad</td>
            <td>@ViewBag.sonuc.adsoyad</td>
        </tr>
    </table>
</body>

Şeklinde ayarladım.Evet artık çalıştıralım ve sonuç.