【发布时间】:2010-02-19 21:42:04
【问题描述】:
我参与了在我的应用中实施原生 CAPTCHA(即不是 reCaptcha)解决方案的过程。我按照 Sanderson 的书 Pro ASP.NET MVC Framework 构建了它。它内置在 HtmlHelper 类中,因此我可以在我的视图中调用它,例如
<%= Html.Captcha("nameOfGeneratedCaptchaIdField")%>
但是,要使用它,我需要一种方法来允许它重新生成。即,如果您看不懂,请单击 [此处]。
这个 [这里] 我想成为一个控制器动作,它生成验证码图像并返回 html。 (我将在 Ajax.ActionLink 链接中使用它。)
但我无法弄清楚如何在我的控制器中执行此操作。如何获得 HtmlHelper 所需的 HtmlHelper 句柄
public ActionResult RegenerateCaptcha(string name)
{
var myHtmlHelper = ???;
var newCaptcha = Captcha.Helpers.CaptchaHelper.Captcha(myHtmlHelper, name);
if (Request.IsAjaxRequest())
{
return Content(newCaptcha.ToString());
}
else
{
return Content(newCaptcha.ToString());
}
}
我的验证码助手编码为:
// this is invoked in a view by <%= Html.Captcha("myCaptcha") %>
public static string Captcha(this HtmlHelper html, string name)
{
// Pick a GUID to represent this challenge
string challengeGuid = Guid.NewGuid().ToString();
// Generate and store a random solution text
var session = html.ViewContext.HttpContext.Session;
session[SessionKeyPrefix + challengeGuid] = MakeRandomSolution();
// Render an <IMG> tag for the distorted text,
var urlHelper = new UrlHelper(html.ViewContext.RequestContext);
string url = urlHelper.Action("Render", "CaptchaImage", new{challengeGuid});
// fill it with a newly rendered image url,
// plus a hidden field to contain the challenge GUID
return string.Format(ImgFormat, name, challengeGuid, url);
}
我想我可以将它从 Helper 中复制出来并将其粘贴到我的控制器操作中,但这似乎有点贫民窟......
谢谢。
【问题讨论】:
标签: asp.net-mvc