2017-05-05 2 views
2

Bonjour J'essaie d'affecter la valeur booléenne d'un objet (donnée) obtenue à partir de la validation recaptcha. La valeur de l'objet est TRUE mais l'assigner à la variable ne fonctionne pas et la fin l'envoie comme False.Comment affecter une valeur booléenne d'un objet à une variable dans Visual Basic

Protected Sub Validate_Captcha(ByRef Validation As Boolean) 

    Dim hdk As String = "ITOOKOUTTHESTRING" 
    'Dim res As Recaptcha = Recaptcha.RecaptchaResponse() 
    Dim Response As String = HttpContext.Current.Request.Form("g-recaptcha-response") 
    Dim request As WebRequest = WebRequest.Create("https://www.google.com/recaptcha/api/siteverify?secret=" & hdk & "&response=" & Response) 

    Using wResponse As WebResponse = request.GetResponse() 
     Using readStream As StreamReader = New StreamReader(wResponse.GetResponseStream()) 
      Dim jsonResponse As String = readStream.ReadToEnd() 
      Dim js As JavaScriptSerializer = New JavaScriptSerializer() 
      Dim data As Object = js.Deserialize(Of Object)(jsonResponse) 
      js.ConvertToType(Of Object)(data) 
      Try 
      '' For Each obj As Object In data 
      ''  Validation = Convert.ToBoolean(obj.Success.Value) 
       Next 

       '' **************************** 
       '' THE PROBLEM IS HERE 

       Validation = data(0).value 

       '' ************************** 

enter image description here

   If Validation = False Then 
        Dim se As New Exception("Object is not validated") 
        Throw se 
       End If 

      Catch ex As FormatException 
       lblError.Text = ex.Message 
      Catch ex As InvalidCastException 
       lblError.Text = ex.Message 
      Catch ex As Exception 
       lblError.Text = ex.Message 

      End Try 
     End Using 
    End Using 
End Sub 
+1

J'aime vraiment l'instantané IDE au milieu de votre code. Vous obtenez +1 pour cela. – djv

+1

Peut-être que vous devriez convertir data (0) .value (qui est un objet) en booléen en utilisant: Convert.ToBoolean (data (0) .value). Sidenote: convertir ce sub en une fonction qui retourne un booléen. Comme l'exemple dans la page Codeproject liée dans la réponse de djv. –

+1

'data (0) .value' semble être un booléen. Et il semble que vous devriez pouvoir le lier tardivement. Mais quel est le type des objets dans 'data'? Tout ce que je vois est 'System.Collections.Generic ...'. Sont-ils KeyValuePairs (Of string, object)? Est-ce que data est alors un Dictionary (Of string, object)? Si c'est le cas, vous ne pouvez pas le saisir avec un entier. Si ma réponse ne fonctionne pas pour vous, essayez 'Validation = data (" succès ")' – djv

Répondre

0

Voir this codeproject page. Cela ressemble beaucoup à votre code. Sauf, cette personne effectue les opérations suivantes:

Définir une classe avec une chaîne succès

Public Class MyObject 
    Public Property Success As String 
End Class 

Puis deserialize à cette classe au lieu d'objet. Accédez à la propriété Success en convertissant la chaîne

Dim data = js.Deserialize(Of MyObject)(jsonResponse) 
Dim valid = Convert.ToBoolean(data.Success)