C# 如何为ASP.NET MVC站点构建验证码验证体系结构?

C# 如何为ASP.NET MVC站点构建验证码验证体系结构?,c#,asp.net,asp.net-mvc,architecture,captcha,C#,Asp.net,Asp.net Mvc,Architecture,Captcha,我正在编写一个ASP.NET MVC站点,当用户提交的内容未通过我的Akismet垃圾邮件检查时,我希望在其中显示验证码。我知道如何显示验证码,但我很难想象和规划它的体系结构。以下是我目前的想法: 用户通过HTTP POST提交内容 处理提交的操作将运行Akismet检查 如果Akismet检查失败,操作将调用return RedirectToAction(),并将用户发送到验证码操作 验证码动作使用MvcReCaptcha库显示验证码,然后处理验证码结果 如果用户验证成功,则CAPTCHA操作

我正在编写一个ASP.NET MVC站点,当用户提交的内容未通过我的Akismet垃圾邮件检查时,我希望在其中显示验证码。我知道如何显示验证码,但我很难想象和规划它的体系结构。以下是我目前的想法:

  • 用户通过HTTP POST提交内容
  • 处理提交的操作将运行Akismet检查
  • 如果Akismet检查失败,操作将调用
    return RedirectToAction()
    ,并将用户发送到验证码操作
  • 验证码动作使用MvcReCaptcha库显示验证码,然后处理验证码结果
  • 如果用户验证成功,则CAPTCHA操作将用户返回到原始操作
  • 我的问题是:我应该如何设计用户返回到原始操作?我需要以某种方式将用户提交的数据以及原始操作的名称携带到验证码操作中,以便
    重定向到操作
    同时包含这两个内容

    有什么想法吗?提前谢谢


    更新:

    Mare下面的回答与PDC 2008会议的一段录音有关,Jeff Atwood在其中展示了堆栈溢出使用的一点验证码。我要讨论的最终结果是CAPTCHA在堆栈溢出上的工作原理

    Jeff显示的验证码提交代码执行以下操作:

  • 检查“会话[“验证码返回URL”]中的内容;如果没有内容,则返回URL=“/”
  • 验证验证码提交
  • 如果验证码提交正确,
    返回重定向(resultur)
  • 这部分解决了我的问题。然而,还有一些事情我不明白:

    • 如何从调用验证码的方法设置
      会话[“验证码返回URL”]
    • 我应该将返回URL设置为什么?我希望成功提交验证码以触发用户最初进行的表单提交-我如何传递表单路径和表单数据

    也许你可以从PDC 08的一个旧视频中找到一些想法,其中Jeff Atwood在堆栈溢出中谈论ReaPTCHA的实现,它在视频中间的某个地方:

    希望能有帮助