Я реализую управление recaptcha от Google.
Я создал простой c# тестовый проект из их примера и всех работ. Теперь, вместо того, чтобы иметь PublicKey и PrivateKey на aspx странице, я присвоил бы эти значения во время выполнения, поскольку их, скорее всего, вытянут или от web.config или от таблицы базы данных.
Я попробовал следующее в Page_Load
protected void Page_Load(object sender, EventArgs e) {
recaptcha.PublicKey = "";
recaptcha.PrivateKey = "";
}
но я добираюсь, ошибка при утверждении "reCAPTCHA должна быть настроена с общедоступным и закрытым ключом".
Я также пытался переопределить oninit метод страницы и присвоить значения там, но никакую радость.
Какие-либо идеи о том, куда это должно пойти?
Попробуйте используя значение setincodebehind
в вашем теге, например:
<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server"
PublicKey="setincodebehind" PrivateKey="setincodebehind" ... />
Это должно позволить вам правильно установить ключи в выделенном коде. Есть еще пара способов сделать это. Например, вы можете получить значения из статического класса следующим образом:
<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server"
PublicKey="<%= RecaptchaSettings.PublicKey %>"
PrivateKey="<%= RecaptchaSettings.PrivateKey %>" ... />
Где RecaptchaSettings
- это предоставленный вами класс. Или вы можете поместить ключи в раздел appSettings
вашего web.config и получить к ним доступ следующим образом:
<recaptcha:RecaptchaControl ID="myRecaptcha" runat="server"
PublicKey="<%$appSettings:RecaptchaPublicKey %>"
PrivateKey="<%$appSettings:RecaptchaPrivateKey %>" ... />
Надеюсь, это поможет.
Другой способ установить значения ключей, используйте
ключи RecaptchaPublicKey
и RecaptchaPrivateKey
. Эти значения будут использоваться автоматически, если они не будут отменены во время объявления элемента управления ( ответ mjd79 , первый способ).
Pro : если у вас есть несколько деклараций, вам нужно хранить ключи только в одном месте, принцип СУХОЙ.
Такое поведение можно увидеть в исходном коде, RecaptchaControl.cs, строка 135 -... :
public RecaptchaControl()
{
this.publicKey = ConfigurationManager.AppSettings["RecaptchaPublicKey"];
this.privateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"];
...