c# - Web API 2 c# 中的 Google reCaptcha

标签 c# asp.net-web-api asp.net-web-api2 recaptcha

我有一个 ASP.NET Web API 2 项目。我正在尝试从表单中读取谷歌验证码。 我试过这段代码:

    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");
        ....
    }

但我在第一行收到错误:

Cannot apply indexing with [] to an expression of type 'HttpRequestMessage'

为什么?以及如何解决?谢谢

最佳答案

该方法的主体对我来说工作正常:

 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()

然后将这个变量传递给Web 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;
    }

“user”是之前创建的JS对象,通过JS传给服务器。 (AJAX 调用)

关于c# - Web API 2 c# 中的 Google reCaptcha,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43327257/

相关文章:

javascript - 将敏感数据存储在 Local Stoarge 或 session 存储中是否安全? Localstorage 允许对敏感数据进行任何攻击

c# - 使用 C# 将对象导出到 excel

c# - .NET Framework 4.5 或更高版本中的 AccessViolationException

c# - 确定对象是否已在 C# 中被销毁(即不再在任何地方找到)

c# - 水平滚动固定页眉/页脚

asp.net - Web API 外部承载未经授权

javascript - 如何使用 Breeze 查询常规可查询 WebApi 端点?

c# - WebApi Controller 返回空数据

asp.net-mvc - 使用 OWIN 和 app.UseWebApi 在 Web API 中继续使用 cookie 进行身份验证

c# - 是否可以在 ASP.NET Web API 中发送空格参数?