我有一个 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/