纸壳CMS自带验证码,在表单中添加验证码也比较简单。只需要将某个字段定义为验证码即可,纸壳CMS将会自动验证用户输入的验证码是否有效。
在ViewModel中定义一个Captcha属性,例如:
[DataTable("CMS_Message")]
public class MessageEntity : EditorEntity
{
    [Key]
    public int ID { get; set; }
    public string Email { get; set; }
    public string PostMessage { get; set; }
    public string Reply { get; set; }
    [NotMapped]
    public string Captcha { get; set; }
}然后元数据的配置中将Captcha属性配置为验证码:
class MessageMetaData : ViewMetaData<MessageEntity>
{
    protected override void ViewConfigure()
    {
        ......
        ViewConfig(m => m.Captcha).AsImageCaptcha();
    }
}再将验证码输出到表单中:
<div class="form-group">
    @Html.EditorFor(m => m.Captcha)
    @Html.ValidationMessageFor(m => m.Captcha)
</div>最后在Controller中使用ModelState.IsValid来判断用户的所有输入是否验证通过,包括验证码:
[HttpPost, ValidateAntiForgeryToken, RenderRefererPage]
public IActionResult PostMessage(MessageEntity entity)
{
    if (ModelState.IsValid)
    {
        entity.Status = (int)RecordStatus.InActive;
        var result = _messageService.Add(entity);
        ModelState.Merge(result);
        if (!result.HasViolation)
        {
            TempData["Message"] = _localize.Get("Thank You for your submit!");
        }
    }
    return View(entity);
}当用户的输入无效时,将会返回页面提示用户重新输入。