Как установить настройки ключа рекапчи во время выполнения - PullRequest
8 голосов
/ 25 июня 2010

Я использую элемент управления recaptcha от Google.

Я построил простой тестовый проект на c # на их примере, и все работает. Теперь вместо того, чтобы использовать PublicKey и PrivateKey на странице aspx, я бы лучше назначил эти значения во время выполнения, так как они, скорее всего, будут извлечены из файла web.config или из таблицы базы данных.

Я попробовал следующее в Page_Load

    protected void Page_Load(object sender, EventArgs e) {
        recaptcha.PublicKey = "<deleted for obvious reasons>";
        recaptcha.PrivateKey = "<ditto>";
    }

, но я получаю сообщение об ошибке: «reCAPTCHA должен быть настроен с открытым и закрытым ключом».

Я также попытался переопределить метод oninit страницы и присвоить там значения, но без радости.

Любые идеи о том, где это должно идти?

Ответы [ 2 ]

16 голосов
/ 25 июня 2010

Попробуйте использовать значение 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 %>" ... />

Надеюсь, это поможет.

2 голосов
/ 30 июня 2010

Другой способ задания значений клавиш - <appSettings> keys RecaptchaPublicKey и RecaptchaPrivateKey.Эти значения будут использоваться автоматически, если они не будут переопределены при объявлении элемента управления ( ответ mjd79 , первый путь).

Pro : если у вас есть несколько объявлений, вам нужно толькочтобы хранить ключи в одном месте, принцип СУХОГО.

Это поведение можно увидеть через исходный код, RecaptchaControl.cs, строка 135 -... :

public RecaptchaControl()
{
    this.publicKey = ConfigurationManager.AppSettings["RecaptchaPublicKey"];
    this.privateKey = ConfigurationManager.AppSettings["RecaptchaPrivateKey"];
    ...
...