مخزن جامع کدها و الگوهای توسعه

اسنیپت‌ها، ترفندها و کدهای کاربردی

مجموعه‌ای منتخب از ساختارهای کد، پیکربندی‌های بهینه، پیش‌نیازها و کدهای همراه برای زبان‌ها و فریم‌ورک‌های مختلف.

۱ کد انتخاب شده
دسته‌بندی: .NET اضافه کردن کپچا
پاکسازی همه فیلترها
.NET CSHARP 1405/08/01

اضافه کردن کپچا (Add Captcha)

تنظیمات کپچا در get و set با سریالایز و دی سریالایز انجام میشود. نکته مهم اینه با تنظیم کپچا در متد Get باید در متد Post نیز جدا از چک کردن کپچا با captcha.IsValid ، باید در شروط دیگر نیز بعد هر بار نقض شدن یک کپچا جدید ساخته و loginViewModel.ImageData = captcha.ImageData شود تا با هر خطا کپچای جدید ساخته شود . و اگر در شرطی این عملیات نباشد عکس بعد از زدن دکمه ورود و نمایش خطا ، دیگر نمایش داده نمیشود.

پیش‌نیازها و وابستگی‌ها (Dependencies)
https://www.aspsnippets.com/DownloadFile?File=ASPSnippets.Core.Captcha.dll
csharp
// ...Controller.cs
namespace ...
{
    public class ...: Controller
    {
        public Captcha captcha
        {
            get
            {
                return JsonConvert.DeserializeObject<Captcha>(TempData["Captcha"].ToString());
            }
            set
            {
                TempData["Captcha"] = JsonConvert.SerializeObject(value);
            }
        }

        ... 

        [HttpGet("Login")]
        public IActionResult Login(string ReturnUrl="/")
        {
            captcha = new Captcha(180, 40, 20f, "#FFFFFF", "#61028D", Mode.AlphaNumeric);
            ViewBag.ReturnUrl = ReturnUrl;
            return View(new LoginViewModel()
            {
                ImageData = captcha.ImageData
            });
        }

        [HttpPost("Login"), ValidateAntiForgeryToken]
        public async Task<IActionResult> Login(LoginViewModel loginViewModel)
        {
            if (!ModelState.IsValid)
            {
                captcha = new Captcha(180, 40, 20f, "#FFFFFF", "#61028D", Mode.AlphaNumeric);
                loginViewModel.ImageData = captcha.ImageData;
                return View(loginViewModel);
            }

            if (!captcha.IsValid(loginViewModel.CaptchaAnswer))
            {
                captcha = new Captcha(180, 40, 20f, "#FFFFFF", "#61028D", Mode.AlphaNumeric);
                ModelState.AddModelError("CaptchaAnswer","عبارت امنیتی صحیح نمیباشد.");
                loginViewModel.ImageData = captcha.ImageData;
                return View(loginViewModel);
            }

            ...
        }

}

// ViewModel.cs
public class LoginViewModel
{

    ...

    public string? ImageData { get; set; }

    [DisplayName("عبارت امنیتی")]
    [Required(ErrorMessage = "لطفا {0} وارد کنید")]
    public string CaptchaAnswer { get; set; } 
}

// View.cshtml
@{
   TempData.Keep("Captcha");
}

<div class="form-element-row mb-1">
    <div class="d-flex align-items-center gap-2 mb-1">
      <div class="col-5 mt-2">
         <input type="text" asp-for="CaptchaAnswer" class="form-control" placeholder="عبارت امنیتی">
      </div>
      <div class="ms-auto ">
         <img src="@Model.ImageData" />
      </div>
    </div>
    <span asp-validation-for="CaptchaAnswer" class="text-danger m-1"></span>
</div>
نکات کلیدی و ترفندها (Tips & Notes)
باید فایل ASPSnippets.Core.Captcha.dll در مسیر Dependencies => Add Shared Project References => Add به پروژه وب اضافه کنیم