如何在运行时设置重新访问密钥设置

时间:2010-06-25 15:37:43

标签: c# asp.net webforms recaptcha

我正在从谷歌实施recaptcha控件。

我从他们的例子和所有作品中构建了一个简单的c#测试项目。现在,我不是在aspx页面中使用PublicKey和PrivateKey,而是在运行时分配这些值,因为它们很可能是从web.config或数据库表中提取的。

我在Page_Load

中尝试了以下内容
    protected void Page_Load(object sender, EventArgs e) {
        recaptcha.PublicKey = "<deleted for obvious reasons>";
        recaptcha.PrivateKey = "<ditto>";
    }

但我收到一条错误消息,指出“需要使用公钥和私钥配置reCAPTCHA。”

我也试过覆盖页面的oninit方法并在那里分配值,但没有快乐。

关于这需要去哪里的任何想法?

2 个答案:

答案 0 :(得分:16)

尝试在标记中使用setincodebehind的值,如下所示:

<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server" 
  PublicKey="setincodebehind" PrivateKey="setincodebehind" ... />

这应该让你正确设置代码隐藏中的键。还有其他几种方法可以做到这一点。例如,您可以从静态类中获取值,如下所示:

<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server" 
  PublicKey="<%= RecaptchaSettings.PublicKey %>" 
  PrivateKey="<%= RecaptchaSettings.PrivateKey %>" ... />

RecaptchaSettings是您提供的课程。或者,您可以将密钥放入web.config的appSettings部分,然后像这样访问它们:

<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server" 
  PublicKey="<%$appSettings:RecaptchaPublicKey %>" 
  PrivateKey="<%$appSettings:RecaptchaPrivateKey %>" ... />

希望有所帮助。

答案 1 :(得分:2)

设置键值的另一种方法是使用<appSettings>RecaptchaPublicKeyRecaptchaPrivateKey。除非在控制声明(mjd79's answer,第一种方式)中覆盖它们,否则将自动使用这些值。

Pro :如果你有多个声明,你只需要把钥匙放在一个地方,DRY原则。

通过源代码RecaptchaControl.cs, line 135-...

可以看到此行为
public RecaptchaControl()
{
    this.publicKey = ConfigurationManager.AppSettings["RecaptchaPublicKey"];
    this.privateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"];
    ...