2017-04-10 10 views
1

나는 ASP.NET 웹 API 2 프로젝트를 가지고 있습니다. 양식에서 Google Captcha를 읽으려고합니다.웹 API 2의 Google reCaptcha C#

public string Post(FoundingRequest model) 
    { 
     var response = Request["g-recaptcha-response"]; 
     string secretKey = "my key"; 
     var client = new WebClient(); 
     var result = client.DownloadString(
     $"https://www.google.com/recaptcha/api/siteverify?secret={secretKey}&response={response}"); 
     var obj = JObject.Parse(result); 
     model.Captcha = (bool)obj.SelectToken("success"); 
     .... 
    } 

하지만 첫 번째 줄에 오류를 받고 있어요 : 나는이 코드를 시도

유형 'HttpRequestMessage'

의 표현에 []와 색인을 적용 할 수 없습니다

왜? 어떻게 해결할 수 있을까요?

답변

1

, 나는 어떤 이름의 숨겨진 파일을 생성하고 다시 보안 문자 호출에 그 값을 업데이트합니다. 코드 :

<script type="text/javascript"> 
    var imNotARobot = function() { 
     $("#recaptcha").val(grecaptcha.getResponse()); 
    }; 
</script> 

서버 측 :

<input type="hidden" value="" id="recaptcha" name="recaptcha" /> 
    <div class="g-recaptcha" data-callback="imNotARobot" data-sitekey="key"></div> 

와 자바 스크립트는

public string Recaptcha { get; set; } 

및 바인더는 모든 작업을 수행합니다.

3

나를 위해 방법의 몸이 잘 작동하는지 감사 :

const string secretKey = "YOUR KEY"; 
      string responseFromServer = ""; 

      HttpWebRequest req = (HttpWebRequest)WebRequest.Create("https://www.google.com/recaptcha/api/siteverify?secret=" + secretKey + "&response=" + response); 

      using (WebResponse resp = req.GetResponse()) 
      using (Stream dataStream = resp.GetResponseStream()) 
      { 
       if (dataStream != null) 
       { 
        using (StreamReader reader = new StreamReader(dataStream)) 
        { 
         // Read the content. 
         responseFromServer = reader.ReadToEnd(); 
        } 
       } 
      } 

      dynamic jsonResponse = new JavaScriptSerializer().DeserializeObject(responseFromServer); 

      return jsonResponse == null || bool.Parse(jsonResponse["success"].ToString()); 

업데이트

을 주석에 대해서는,이 클라이언트 측에서 확인할 수 있습니다

var response = window.grecaptcha.getResponse()

그리고 이 변수를 웹 API

로 전달하십시오.

이 내 클라이언트 스크립트의 일부입니다

 if (typeof window.grecaptcha != 'undefined') { 
     var capResponse = window.grecaptcha.getResponse(); 

     if (!capResponse || capResponse.length === 0) { 
      user.isCaptchaPassed = false; 
      //alert("Captcha not Passed"); 
      return false; 
     } 

     user.gReCaptcha = capResponse; 
    } 

"사용자"서버에 JS를 통과하기 전에 생성 된 JS 객체입니다. (AJAX 호출) 나는이 요청 양식에서 오는 가정

+0

문제는 다음 행에 있습니다. var response = Request [ "g-recaptcha-response"]; –

+0

업데이트를 확인하십시오. 그것은 JS 및 웹 API – SouXin

-1

이 변경이로

var response = Request["g-recaptcha-response"]; 

:

:

var response = Request.Form["g-Recaptcha-Response"]; 

는 또한이 변경

var result = client.DownloadString($"https://www.google.com/recaptcha/api/siteverify?secret={secretKey}&response={response}"); 
이에

: 나는 답을 발견

var result = client.DownloadString(string.Format("https://www.google.com/recaptcha/api/siteverify?secret={0}&response={1}", secretKey, response)); 
+0

의 경우에 다시 작동해야합니다 질문을 다시 읽어보십시오.문제는 다음과 같습니다 : var response = Request [ "g-recaptcha-response"]; 질문에 언급 된 오류 메시지가있는 첫 번째 줄 –

+0

오해해서 죄송합니다. 내 대답에 대한 업데이트를 확인하십시오. – Kyle

+0

웹 API 2 요청서에 양식이 없습니다 –