我正在为我当前的公司更新一个工具,该工具根据所选择的选项提供基本的产品布局文档。最近似乎某种机器人定期访问工具箱,在与公司讨论后,我们构建了工具箱,因为我们决定将 ReCaptcha 工具添加到页面。
工具箱的设置方式是 ASP.net,不使用 Json 或 MVC(工具箱已经有几年历史了,早在我加入团队之前就已经构建好了)。添加 ReCaptcha 工具不是问题,我在没有插件的情况下使用了 window.onload 函数并使用了他们的说明。这一切都在 options.aspx 页面上完成,ReCaptcha 调用的代码在 options.aspx.cs 页面中。
为了达到这个代码,我试图在通常提交表单的地方进行 AJAX 调用。
问题: 每个 AJAX 调用都返回页面的 HTML,当我有断点时,页面方法 (VerifyReCaptcha) 不会触发。我需要它来调用将完成所有列表的方法,然后简单地传回一个字符串,该字符串简单地说明它是否成功。我输入什么数据类型或内容类型(如果有的话),或者我是否将其作为 POST 或 GET 运行似乎并不重要。
这是调用 ajax 调用函数的按钮的代码。
<input type="button" id="DownloadLayoutButton" value="Download Layout" class="navigationButton" style="width: 200px; height: 24px;" />
这是被调用的函数。
$("#DownloadLayoutButton").click(function () {
$.ajax(
{
url: "options.aspx/VerifyReCaptcha",
dataType: "text",
data: {
challenge: Recaptcha.get_challenge(),
response: Recaptcha.get_response()
},
type: "POST",
success: function (result) {
if (result == "Success") {
alert("Success!");
else
alert("ReCaptcha entry was incorrect!");
},
error: function (request, status, error) {
alert("Error!");
}
});
});
此代码似乎从未命中 options.aspx.cs 页面上的 VerifyReCaptcha() 方法,该方法如下。如前所述,我已经测试并确认此功能可以自行运行。以前我让它返回一个布尔值,但由于 ajax 不能使用布尔值,我将它更改为根据结果返回“成功”或“失败”。
[WebMethod]
public static string VerifyReCaptcha(string challenge, string response)
{
try
{
string PRIVATE_KEY = "MY_KEY_HERE";
string remoteip = HttpContext.Current.Request.UserHostAddress;
WebRequest request = WebRequest.Create("http://www.google.com/recaptcha/api/verify");
byte[] dataBytes = System.Text.Encoding.UTF8.GetBytes(String.Format("privatekey={0}&remoteip={1}&challenge={2}&response={3}", PRIVATE_KEY, remoteip, challenge, response));
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.ContentLength = dataBytes.Length;
request.GetRequestStream().Write(dataBytes, 0, dataBytes.Length);
String resultString = String.Empty;
String errorString = String.Empty;
using (StreamReader sr = new StreamReader(request.GetResponse().GetResponseStream()))
{
resultString = sr.ReadLine();
errorString = sr.ReadLine();
}
Boolean b;
b = Boolean.TryParse(resultString, out b) && b;
if (b)
return "Success";
else
return "Failure";
}
catch (Exception)
{
return "Failure";
}
}
aspx 页面使用以下来源。
<script type="text/javascript" src="JS/jquery-1.3.2.min.js"></script>
<script type="text/javascript" src="JS/jquery-validate/jquery.validate.js"></script>
<script type="text/javascript" src="http://www.google.com/recaptcha/api/js/recaptcha_ajax.js"></script>