2010-06-25 45 views
8

Tôi đang triển khai kiểm soát recaptcha từ google.Cách đặt cài đặt khóa recaptcha tại thời gian chạy

Tôi đã xây dựng một dự án thử nghiệm C# đơn giản từ ví dụ của họ và tất cả các công trình. Bây giờ, thay vì có PublicKey và PrivateKey trong trang aspx, tôi muốn gán các giá trị này vào thời gian chạy vì chúng rất có thể sẽ được kéo từ web.config hoặc một bảng cơ sở dữ liệu.

Tôi đã thử các sau đây trong Page_Load

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

nhưng tôi nhận được một lỗi nêu rõ "reCAPTCHA cần phải được cấu hình với một công & khóa bí mật."

Tôi cũng đã cố gắng ghi đè phương thức oninit của trang và gán giá trị ở đó, nhưng không có niềm vui.

Mọi ý tưởng về nơi cần phải thực hiện điều này?

Trả lời

16

Hãy thử sử dụng các giá trị của setincodebehind trong thẻ của bạn, như thế này:

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

Điều đó sẽ cho phép bạn thiết lập các phím trong codebehind đúng cách. Có một vài cách khác để làm điều đó là tốt. Ví dụ, bạn có thể nhận các giá trị từ một lớp tĩnh như thế này:

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

đâu RecaptchaSettings là một lớp học mà bạn cung cấp. Hoặc, bạn có thể đặt khóa vào phần appSettings trong web.config của bạn và truy cập chúng như sau:

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

Hy vọng điều đó sẽ hữu ích.

+0

Perfect. Cảm ơn – NotMe

+0

Lộn xộn xung quanh, có vẻ như 'setincodebehind' có thể là bất kỳ chuỗi nào. Cảm ơn, điều này làm việc tốt. – goodeye

+1

Tôi bungled xung quanh này một thời gian - có - bạn phải có thuộc tính PublicKey và PrivateKey trong điều khiển trên quan điểm của bạn - nhưng họ không cần các giá trị chính xác. Nếu họ không có ở đó - khi truy cập thông qua codebehind - bạn nhận được đối tượng không được thiết lập để một lỗi ví dụ. – ajwaka

2

Một cách khác để đặt giá trị khóa, sử dụng các phím <appSettings>RecaptchaPublicKeyRecaptchaPrivateKey. Các giá trị này sẽ được sử dụng tự động trừ khi nó được ghi đè trong quá trình khai báo điều khiển (mjd79's answer, cách đầu tiên).

Pro: nếu bạn có nhiều khai báo, bạn chỉ cần giữ các khóa ở một nơi, nguyên tắc DRY.

Hành vi này có thể được nhìn thấy qua các mã nguồn, RecaptchaControl.cs, line 135-...:

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

Tìm kiếm thú vị. Cảm ơn! – NotMe

Các vấn đề liên quan