Asp.net MVC ile Kendi Güvenlik Kodumuzu "Captcha" Kendimiz Yapacağız Bunun için aşağıdaki adımları takip ediniz.
1) ilk önce Models klasöründe bir class oluşturup aşağıdaki kodları yazıyoruz.
namespace Captcha_ikslab.com.Models
{
public class XModel
{
public string Email { get; set; }
public string Mesaj { get; set; }
}
}
2) Bu linkten "SRVTextToImage.dll" adlı dll dosyasını indirip Reference a ekliyoruz
3)Yeni Bir Controller Açıyoruz ve içine aşağıdaki gibi bir action oluşturuyoruz.
[HttpGet]
[OutputCache(NoStore = true, Duration = 0, VaryByParam = "None")]
public FileResult CaptchaImageOlustur()
{
CaptchaRandomImage CI = new CaptchaRandomImage();
this.Session["GuvenlikKodu"] = CI.GetRandomString(5); //Burda güvenlik kodumuzun 5 karekter olması istedik
CI.GenerateImage(this.Session["GuvenlikKodu"].ToString(), 300, 75, Color.DarkGray, Color.White);
//Yukarda Güvenlik resmimizin 300x75 boyutunda olmasını ve yazının koyu gri, arkaplanıda beyaz yaptık
MemoryStream stream = new MemoryStream();
CI.Image.Save(stream, ImageFormat.Png);
stream.Seek(0, SeekOrigin.Begin);
return new FileStreamResult(stream, "image/png");
}
4)Yeni bir Action açıp view ekliyoruz
public ActionResult Form()
{
return View();
}
5)Oluşturduğumuz view aşağıdaki gibi dolduruyoruz
@model Captcha_ikslab.com.Models.XModel
@{
ViewBag.Title = "GÜvenli Form";
Layout = "~/Views/Shared/_Layout.cshtml";
}
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
@Html.AntiForgeryToken()
<fieldset>
<legend>Güvenli Form </legend>
<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Mesaj)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Mesaj)
@Html.ValidationMessageFor(model => model.Mesaj)
</div>
<div class="editor-label">
Güvenlik Kodu
</div>
<div class="editor-field">
<img src="@Url.Action("CaptchaImageOlustur","Captcha")" />
</div>
<div class="editor-field">
<input type="text" name="GuvenlikKodu" id="GuvenlikKodu" value="@ViewBag.GuvenlikKodu" />
</div>
<p>
<input type="submit" value="Gönder" />
</p>
<div>
@if (ViewBag.bildirim != null)
{
<div style="border: 1px solid red; width:300px;padding: 5px;">
@ViewBag.bildirim
</div>
}
</div>
</fieldset>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
6) Daha sonra post için bir action daha oluşturuyoruz.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Form(XModel x, string GuvenlikKodu)
{
if (this.Session["GuvenlikKodu"].ToString() == GuvenlikKodu)
{
ViewBag.bildirim = "Güvenlik Kodu Doğru";
//Güvenlik Kodu Doğru ise yapılacak işlemler
}
else
{
ViewBag.bildirim = "Güvenlik Kodu Yanlış!";
//Güvenlik Kodu Yanlış ise yapılacak işlemler
}
return View(x);
}
Ve güvenlik kodunuz tamamdır...
Projeyi indirmek için tıklayın.