Я только что обнаружил, что MVCRecaptcha проект, который, кажется, делает именно это. У меня не было времени, чтобы копаться во внутренних деталях, но суть содержится в двух небольших файлах. Для тех из вас, кому лень переходить по вышеуказанной ссылке, позвольте мне попытаться объяснить:
По сути, они создают элемент управления программно, а затем вызывают RenderControl для вывода HTML-кода на провод:
var captchaControl = new RecaptchaControl { ... }
var htmlWriter = new HtmlTextWriter(new StringWriter());
captchaControl.RenderControl(htmlWriter);
return htmlWriter.InnerWriter.ToString();
На стороне ответа они затем создают атрибут, который вы можете добавить к своим действиям MVC:
class CaptchaValidatorAttribute : ActionFilterAttribute {...}
Этот класс, воссоздающий элемент управления и вызывающий:
var recaptchaResponse = captchaValidtor.Validate();
// this will push the result value into a parameter in our Action
filterContext.ActionParameters["captchaValid"] = recaptchaResponse.IsValid;
Это означает, что ваш контроллер должен выглядеть примерно так:
[CaptchaValidator]
[AcceptVerbs( HttpVerbs.Post )]
public ActionResult CreateComment( Int32 id, bool captchaValid )
{
if (!captchaValid)
{
ModelState.AddModelError("_FORM", "You did not type the verification word correctly. Please try again.");
}
// ...
}
Хотя проект теперь устарел, он показывает, как использовать элемент управления ASP.Net в приложении MVC.