Я использую генератор капчи. http://xcaptcha.codeplex.com/. В этом примере показано использование Session.Add
для сравнения сгенерированного капчи с ответом. Я хотел сделать это частью проверки правил моей модели, но я не могу найти / работать с правильными частями сеанса там. Я пропускаю способ перейти к сеансу из GetRuleViolations моей модели? Любые другие советы приветствуются
// Controller
public ActionResult Image()
{
var builder = new XCaptcha.ImageBuilder();
var result = builder.Create();
Session.Add("CaptchaKey", result.Solution);
return new FileContentResult(result.Image, result.ContentType);
}
// My model
public IEnumerable<RuleViolation> GetRuleViolations()
{
// This isn't correct... it isn't stored in server variables
string captchaAnswer = HttpContext.Current.Request.ServerVariables.Get("CaptchaKey");
// No such thing..
string res = Session["Something"].ToString();
}
// My eh solution
// Controller
[HttpPost]
public ActionResult ContactUs(EmailModel e, FormCollection collection)
{
string captchaAnswer = Session["CaptchaKey"].ToString();
string captchaText = collection["CaptchaText"].ToUpper().ToString();
bool correctCaptcha = (captchaAnswer.CompareTo(captchaText) == 0) ? true : false;
if (e.IsValid && correctCaptcha)
{
EmailHelper.SendMessage(e);
return RedirectToAction("ContactSuccess");
}
else
{
if (!correctCaptcha)
ModelState.AddModelError("Captcha", "Incorrect Captcha answer");
ModelState.AddRuleViolations(e.GetRuleViolations());
}
return View(e);
}