我正在从谷歌实施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方法并在那里分配值,但没有快乐。
关于这需要去哪里的任何想法?
答案 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>
键RecaptchaPublicKey
和RecaptchaPrivateKey
。除非在控制声明(mjd79's answer,第一种方式)中覆盖它们,否则将自动使用这些值。
Pro :如果你有多个声明,你只需要把钥匙放在一个地方,DRY原则。
通过源代码RecaptchaControl.cs, line 135-...:
可以看到此行为public RecaptchaControl()
{
this.publicKey = ConfigurationManager.AppSettings["RecaptchaPublicKey"];
this.privateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"];
...