You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReCaptcha v3本地运行正常 远程服务器返回500内部错误如何解决

ReCaptcha v3 部署后返回500错误解决方案

核心问题定位

该问题属于本地与IIS服务器运行环境差异、代码不规范共同导致的异常,核心原因包括异步方法同步调用引发IIS死锁、前后端参数传递缺失、静态变量线程安全隐患、配置不匹配四类。

修复方案

1. 前端代码修正

原有代码未获取reCaptcha生成的校验令牌也未传递给后端,同时jQuery异步错误回调配置错误,修正后代码如下:

(function () {
$('#btnLogin').click(function () {
    grecaptcha.ready(function() {
        // 替换为你申请的reCaptcha v3站点密钥
        grecaptcha.execute('YOUR_RECAPTCHA_SITE_KEY', {action: 'login'}).then(function(token) {
            $.ajax({
                type: "POST",
                url: "/captcha/lasttry.aspx/CaptchaVerify",
                data: JSON.stringify({token: token}),
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                success: function (response) {
                    var _response = JSON.parse(response.d);
                    if (_response.score < 0.5) {
                        $('#status').text("User is not human being! Score = " + _response.score);
                        $('#status').removeClass('text-info').addClass('text-danger');
                    }
                    else {
                        $('#status').text("User is human being . Score = " + _response.score);
                        $('#status').removeClass('text-error').addClass('text-success');
                    }
                },
                error: function (response) {
                    $('#status').text("Error on Server!");
                }
            });
        });
    });
});
})();

2. 后端代码修正

原有代码存在异步同步混用死锁、静态变量线程安全问题、HttpClient使用不当三类缺陷,修正后代码如下:

using System.Net.Http;
using System.Web;
using System.Web.Services;
using Newtonsoft.Json;

// 静态HttpClient复用避免端口耗尽
private static readonly HttpClient _httpClient = new HttpClient();
private static string apiAddress = "https://www.google.com/recaptcha/api/siteverify";
// 替换为你申请的reCaptcha v3服务端密钥
private static string recaptchaSecret = "YOUR_RECAPTCHA_SECRET_KEY";

public class ResponseToken
{
    public bool success { get; set; }
    public decimal score { get; set; }
    public string action { get; set; }
    public DateTime challenge_ts { get; set; }
    public string hostname { get; set; }
    public string[] errorcodes { get; set; }
}

[WebMethod]
public static async Task<string> CaptchaVerify(string token)
{
    var responseString = await RecaptchaVerify(token);
    var response = JsonConvert.DeserializeObject<ResponseToken>(responseString);
    return JsonConvert.SerializeObject(response);
}

private static async Task<string> RecaptchaVerify(string recaptchaToken)
{
    string url = $"{apiAddress}?secret={recaptchaSecret}&response={recaptchaToken}";
    return await _httpClient.GetStringAsync(url);
}

3. 配置层排查

完成代码修正后如果仍有异常,按以下顺序排查配置:

  • 确认web.config中<system.web>节点下的<httpRuntime targetFramework>版本不低于4.5,保证异步调用逻辑正常
  • 确认web.config中<system.web><webServices><protocols>节点下已添加<add name="HttpPost"/>,允许POST请求访问WebMethod
  • 如果服务器需通过代理访问Google,在web.config中添加代理配置:
<system.net>
  <defaultProxy enabled="true" useDefaultCredentials="true">
    <!-- 如有固定代理地址,添加<proxy proxyaddress="http://你的代理地址:端口" /> -->
  </defaultProxy>
</system.net>
  • 确认IIS对应应用程序池的.NET Framework版本与代码编译版本一致,尝试将应用程序池标识从ApplicationPoolIdentity切换为NetworkService,排除权限导致的出站访问限制
  • 开启IIS失败请求跟踪功能,定位500错误的具体堆栈信息,针对性解决剩余问题

内容的提问来源于stack exchange,提问作者Jbrown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 09:42:01