ReCaptcha検証、またはそれが表すもの、つまり実際には人間の検証用のインターフェイスを作成します。次のようになります。
public interface IHumanValidator
{
///Checks validates that the currentuser is human and not a bot
bool Validate();
/// Returns the text to display if the validation fails
string ValidationFailText{get;}
}
IHumanValidator
コンストラクター(または必要に応じてプロパティ)でを受け入れるようにコントローラーを変更する必要があります。次に、メソッドを次のように変更します。
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model)
{
if (!m_humanValidator.Validate())
ModelState.AddModelError("recaptcha", m_humanValidator.ValidationFailText);
if (ModelState.IsValid)
{
//Code for register
}
}
次に、ReCaptcha検証に基づく実装をコントローラーに挿入し、それに対して検証します。
public class ReCaptchaHumanValidator : IHumanValidator
{
public bool Validate()
{
ReCaptcha.Validate(Constants.ReCaptchaPrivateKey)
}
public string ValidationFailText
{
get{return "Incorrect value, enter the text again.";}
}
}
次に、テストに応じて有効または無効を返すように構成できる、テスト用のモックバリデーターを挿入できます。
これには、ReCaptchaではなく別の形式の検証に変更する場合は、IHumanValidatorの別の実装を提供するだけでよく、コード内の他の何も変更する必要がないという利点もあります。