8

我正在实施来自谷歌的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 方法并在那里分配值,但没有任何乐趣。

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

4

2 回答 2

17

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

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

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

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

RecaptchaSettings你提供的课程在哪里。或者,您可以将密钥放入appSettingsweb.config 的一部分,然后像这样访问它们:

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

希望有帮助。

于 2010-06-25T17:15:14.610 回答
2

另一种设置键值的方法,使用<appSettings>RecaptchaPublicKeyRecaptchaPrivateKey. 这些值将自动使用,除非在控制声明期间被覆盖(mjd79 的答案,第一种方式)。

优点:如果您有多个声明,您只需将密钥保存在一个地方,DRY 原则。

通过源代码RecaptchaControl.cs 第 135-... 行可以看到这种行为:

public RecaptchaControl()
{
    this.publicKey = ConfigurationManager.AppSettings["RecaptchaPublicKey"];
    this.privateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"];
    ...
于 2010-06-29T22:46:08.867 回答