8

Google のrecaptchaコントロールを実装しています。

彼らの例とすべての作品から簡単な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 メソッドをオーバーライドしてそこに値を割り当てようとしましたが、喜びはありませんでした。

これがどこに行く必要があるかについてのアイデアはありますか?

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>キーRecaptchaPublicKeyとを使用しますRecaptchaPrivateKey。これらの値は、コントロールの宣言中にオーバーライドされない限り、自動的に使用されます ( mjd79 の回答、最初の方法)。

Pro : 複数の宣言がある場合、キーを 1 か所に保持するだけでよいため、DRY の原則が適用されます。

この動作は、ソース コードRecaptchaControl.cs の 135-... 行目で確認できます。

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