2013-03-12 1 views
1

ReCaptcha.net NuGet 패키지 http://recaptchanet.codeplex.com/wikipage?title=How%20to%20Use%20Recaptcha%20in%20an%20ASP.NET%20MVC%20Web%20Application을 사용하여 MVC3에 ReCaptcha를 구현했습니다. 모두가 잘 작동하는 경우를 제외하고는 비동기식으로 구현할 수 있는지 알고 싶습니다. 때로는 매우 느리며 페이지에 볼륨이있을 수 있습니다.MVC3의 ASync Recaptcha

지침은 구문을 기다리고 이것은 MVC4을 사용하고, 그러나

RecaptchaVerificationResult recaptchaResult = await recaptchaHelper.VerifyRecaptchaResponse(); 

if (recaptchaResult != RecaptchaVerificationResult.Success) 
{ 
    ModelState.AddModelError("", "Incorrect captcha answer."); 
} 

을 말한다. MVC3 비동기 프레임 워크 내에서이 메서드를 사용할 수있는 방법이 있습니까?

컨트롤러를 Async 접미사가있는 메서드 이름을 지정하고 Task.Factory.StartNew (() => {{}})에서 전체 동작을 래핑하여 컨트롤러를 AsyncController로 변환 해 보았습니다. 비동기 구문을 사용하지만 RecaptchaVerificationHelper recaptchaHelper = this.GetRecaptchaVerificationHelper(); HTTPContext의 부족에 대해 불평합니다.

그래서, 누군가가 결국 비동기 MVC3

답변

1

에 reCAPTCHA를 일을 좀 도와 수, 나는 NuGet 패키지를 사용 감소, 단순히 보안 문자의는, 아래의 코드를 사용하여 컨트롤러에서 reCAPTCHA를 필드를 바인딩 처리했습니다 방법. 대신 이에

public bool ProcessCaptcha(string recaptcha_challenge_field, string recaptcha_response_field) 
    { 

     const string verifyUrl = "http://www.google.com/recaptcha/api/verify"; 
     var res = true; 
     var ip = Request.UserHostAddress; 
     if (ip == "::1") ip = "127.0.0.1"; 
     var myParameters = string.Format("privatekey={0}&remoteip={1}&challenge={2}&response={3}", Config.CaptchPriv, ip, recaptcha_challenge_field, recaptcha_response_field); 
     using (WebClient wc = new WebClient()) 
     { 
      wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded"; 
      string HtmlResult = wc.UploadString(verifyUrl, myParameters); 
      var split = HtmlResult.Split('\n'); 
      if (split[0] == "false") res = false; 
     } 

     return res; 
    } 

, 난 다음하는 비동기/완료 쌍의 ​​내 원래 제어 방법을 분할하고 Task.Factory.StartNew에가하는 일 (() => {...}를) 래핑 완벽하게 작동하는 것처럼 보이는 여기에 설명 된 패턴 http://www.deanhume.com/Home/BlogPost/mvc-asynchronous-controller---the-basics/67.