フリーのキャプチャ ASP.NET サーバーコントロール を使用する機会があったので、簡単な使い方のメモを記載します。
検証環境は次の通り
- Visual Studio 2013 Premium
- ASP.NET Web Forms アプリケーション
MS Captcha コントロールのダウンロードや、公式のサイトで公開されているサンプルのダウンロードは次のリンクを参照してください。
ASP.NET CAPTCHA
http://kirsanov.net/page/ASPNET-CAPTCHA.aspx
CAPTCHA sample project
http://kirsanov.net/post/2011/10/28/CAPTCHA-sample-project.aspx
1. キャプチャコントロールのダウンロード
冒頭で紹介したリンクから MS Captcha コントロールをダウンロードしてください。
2.サンプルプロジェクトの作成
Visual Studio を起動して新しくプロジェクトを作成します。テンプレートで ASP.NET Web アプリケーションを選択します。.NET Framework のバージョンは 4.5.1 を選択しました。
新規 ASP.NET プロジェクト ダイアログで テンプレートの選択で Empty を選択します。Web Forms にチェックをしてプロジェクトを作成します。
ソリューションエクスプローラー上で、 プロジェクトの参照設定を右クリック > 参照の追加 をクリックします。参照マネージャーダイアログで参照ボタンをクリックして、 MSCaptchar.dll の参照を追加します。
Web.config を MSCaptcha のサンプルページからダウンロードできる サンプルの Web.config を参考にして編集します。Web.config にはすでに system.web タグや compilation タグが存在するので、それらを上書きしないようにマージしてください。記事作成時点では空のWebサイトからMSCaptchaのハンドラ―の設定を追加した後はこのようになります。
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.web> <compilation debug="true" targetFramework="4.5.1" /> <httpRuntime targetFramework="4.5.1" /> <!--<httpHandlers> <add verb="GET" path="CaptchaImage.axd" type="MSCaptcha.captchaImageHandler, MSCaptcha" /> </httpHandlers>--> </system.web> <!-- The following section is only needed for IIS7 and up --> <system.webServer> <handlers> <add name="MSCaptcha.captchaImageHandler" verb="GET" path="CaptchaImage.axd" type="MSCaptcha.captchaImageHandler, MSCaptcha" resourceType="Unspecified" /> </handlers> </system.webServer> </configuration>
あとは キャプチャコントロールを使用するように、簡単なサンプル Web フォームを作成します。デフォルトで作成あsれる Default.aspx ファイルを次のように編集します。
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="MSCaptcharSample.Default" %> <%@ Register Assembly="MSCaptcha" Namespace="MSCaptcha" TagPrefix="cc1" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> </head> <body> <form id="form1" runat="server"> <div> キャプチャ画像 <cc1:CaptchaControl ID="CaptchaControl1" runat="server" Height="50px" Width="180px" CaptchaLength="5" BackColor="White" EnableViewState="False" /> <br /><br /> </div> <div> <asp:TextBox runat="server" ID="txtAnswer"></asp:TextBox> <asp:Button runat="server" ID="btnValidate" Text="確認" OnClick="btnValidate_Click" /> </div> <div> <asp:Label runat="server" ID="lblResult"></asp:Label> </div> </form> </body> </html>
引き続き コードビハインドファイル (Default.aspx.cs) を次のように編集します。
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace MSCaptcharSample { public partial class Default : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { CaptchaControl1.CaptchaWidth = 200; CaptchaControl1.CaptchaHeight = 70; CaptchaControl1.CaptchaLength = 4; } protected void btnValidate_Click(object sender, EventArgs e) { if (string.IsNullOrEmpty(txtAnswer.Text)) { lblResult.Text = "Please Input the Text in Captcha Image"; } CaptchaControl1.ValidateCaptcha(txtAnswer.Text); if (CaptchaControl1.UserValidated) { lblResult.Text = "正解です"; } else { lblResult.Text = "キャプチャのテキストと異なっています"; } } } }
ビルドしてエラーが発生しないことを確認します。
これで準備完了です。
F5ボタンでデバッグ実行して動作確認します。下図のようにキャプチャ画像が表示されるので、 画像に表示されたテキストを入力して 確認 ボタンをクリックします。
画像と一致するテキストを入力すると "正解です" メッセージが表示されます。
ロードバランスされた環境でMS Captcha コントロールを 使用する場合は CaptchaControl.CacheStrategy を 既定の httpRuntime ではなくて Session(サーバー間で共有されることが前提)やClientSideに設定する必要があると思われます。ClientSide にした場合は EnableViewState は true にしてください。
3.まとめ
説明は以上です。簡単なサンプルを掲載してみました。
さんのコメント: さんのコメント: