Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Net MVC Recaptcha Jquery Ajax问题_Jquery_Html_Ajax_Asp.net Mvc_Recaptcha - Fatal编程技术网

Net MVC Recaptcha Jquery Ajax问题

Net MVC Recaptcha Jquery Ajax问题,jquery,html,ajax,asp.net-mvc,recaptcha,Jquery,Html,Ajax,Asp.net Mvc,Recaptcha,我正在使用ASP.NETMVC,并试图在页面中实现一个GoogleRecaptcha对象 我试图避免在表单中使用模型,只想使用jQueryAjax直接调用一个方法 我已经获得了要显示的验证码,但在调试器中检查RecaptchaVerificationHelper对象时,我输入的任何内容都显示为null 任何建议,以保持它的轻量级,就像我有它,但保持它的工作 注意:这里已经去掉了大部分逻辑,只是想让验证码逻辑正常工作 CSHTML示例: @using Recaptcha.Web.Mvc; <

我正在使用ASP.NETMVC,并试图在页面中实现一个GoogleRecaptcha对象

我试图避免在表单中使用模型,只想使用jQueryAjax直接调用一个方法

我已经获得了要显示的验证码,但在调试器中检查RecaptchaVerificationHelper对象时,我输入的任何内容都显示为null

任何建议,以保持它的轻量级,就像我有它,但保持它的工作

注意:这里已经去掉了大部分逻辑,只是想让验证码逻辑正常工作

CSHTML示例:

@using Recaptcha.Web.Mvc;

<script type="text/javascript">
function createUser() {

            $.ajax({
                type: "POST",
                url: 'CreateUser',
                contentType: "application/json; charset=utf-8",
                success: function (response) {
                    if (response.Success == true) {
                        alert("success");
                        //redirectSuccess();
                    } else {
                        alert("failed");
                    }
                },
                error: function (err) {
                    commonError(err);
                }
            });

    }
</script>

@Html.Recaptcha(publicKey: "6LdxcPgSAA...", theme: Recaptcha.Web.RecaptchaTheme.Clean);
<br />
<input type="button" value="Submit" onclick="createUser();" style="margin-right:300px;" />

提前感谢,

您的控制器方法

public JsonResult CreateUser() //<-- CamelCase

publicjsonresult CreateUser()//在疯狂了一个多星期之后,我终于直接使用开发者API找到了一个可行的解决方案

我所做的是使用jsAPI并使用API手动将captcha控件添加到页面中。在提交时,我捕获了recaptcha响应并将其发送到服务器端

然后,在服务器端,我按照API说明并使用以下教程验证了请求: 然后我发送了请求并相应地处理了响应

HTML:


var captcharesponse=grecaptcha.getResponse();
$.ajax({
类型:“POST”,
url:“CreateUser”,
数据:“{captcharesponse:+JSON.stringify(captcharesponse)+”}”,
contentType:“应用程序/json;字符集=utf-8”,
成功:功能(响应){
if(response.Success==true){
警惕(“成功”);
}否则{
警报(“失败”);
}
},
错误:函数(err){
常见错误(err);
}
});
}

政务司司长:

[HttpPost]
公共JsonResult CreateUser(字符串captcharesponse)
{
Wrapper.ValidationResponse=new Wrapper.ValidationResponse();
回答:成功=正确;
if(Recaptcha.Validate.Check(captcharesponse)=false)
{
回答:成功=错误;
}
尝试
{
//删除逻辑
返回Json(响应);
}
捕获(例外情况除外)
{
回答:成功=错误;
response.Message=“未能创建新用户。如果问题仍然存在,请与我们联系。”;
返回Json(响应);
}
}
公共类验证
{
公共静态布尔检查(字符串响应)
{
//string Response=HttpContext.Current.Request.QueryString[“g-recaptcha-Response”];//获取附加到Post方法的响应字符串
bool Valid=false;
//请求到谷歌服务器
HttpWebRequest req=(HttpWebRequest)WebRequest.Create
(" https://www.google.com/recaptcha/api/siteverify?secret=“+WebConfiguration Manager.AppSettings[“recaptchaPrivateKey”]+”&response=“+response”);
尝试
{
//谷歌回复
使用(WebResponse wResponse=req.GetResponse())
{
使用(StreamReader readStream=newstreamreader(wResponse.GetResponseStream()))
{
字符串jsonResponse=readStream.ReadToEnd();
JavaScriptSerializer js=新的JavaScriptSerializer();
MyObject data=js.Deserialize(jsonResponse);//反序列化Json
Valid=Convert.ToBoolean(data.success);
}
}
返回有效;
}
捕获(WebException ex)
{
掷骰子;
}
}
}
公共类MyObject
{
公共字符串成功{get;set;}
}

在输入问题时是一个打字错误,现在已被编辑并修复。阅读问题会告诉你这不是问题所在。我已经进入了函数的内部。NuGet Google reCAPTCHA V2 for MVC 4和5--
public JsonResult CreateUser() //<-- CamelCase
url: 'createUser', //<-- small case
<script type="text/javascript"
        src='https://www.google.com/recaptcha/api.js'></script>

<script type="text/javascript">
    var captcharesponse = grecaptcha.getResponse();


            $.ajax({
                type: "POST",
                url: 'CreateUser',

                data: "{captcharesponse:" + JSON.stringify(captcharesponse) + "}",
                contentType: "application/json; charset=utf-8",
                success: function (response) {

                    if (response.Success == true) {
                        alert("success");

                    } else {
                        alert("failed");

                    }

                },
                error: function (err) {
                    commonError(err);
                }
            });
        }
</script>

<div class="g-recaptcha"
                 data-sitekey="[public key here]"></div>
            <br />
<input type="button" value="Submit" onclick="createUser();" style="margin-right:300px;" />
[HttpPost]
        public JsonResult CreateUser(string captcharesponse)
        {
            Wrapper.ValidationResponse response = new Wrapper.ValidationResponse();
            response.Success = true;

            if (Recaptcha.Validate.Check(captcharesponse) == false)
            {
                response.Success = false;
            }

                try
                {
                    //removed logic
                    return Json(response);
                }
                catch (Exception ex)
                {
                    response.Success = false;
                    response.Message = "Failed to create new user. Please contact us if the issue persists.";
                    return Json(response);
                }
        }



public class Validate
    {
        public static bool Check(string response)
        {
            //string Response = HttpContext.Current.Request.QueryString["g-recaptcha-response"];//Getting Response String Append to Post Method
            bool Valid = false;
            //Request to Google Server
            HttpWebRequest req = (HttpWebRequest)WebRequest.Create
            (" https://www.google.com/recaptcha/api/siteverify?secret=" + WebConfigurationManager.AppSettings["recaptchaPrivateKey"] + "&response=" + response);
            try
            {
                //Google recaptcha Response
                using (WebResponse wResponse = req.GetResponse())
                {

                    using (StreamReader readStream = new StreamReader(wResponse.GetResponseStream()))
                    {
                        string jsonResponse = readStream.ReadToEnd();

                        JavaScriptSerializer js = new JavaScriptSerializer();
                        MyObject data = js.Deserialize<MyObject>(jsonResponse);// Deserialize Json

                        Valid = Convert.ToBoolean(data.success);
                    }
                }

                return Valid;
            }
            catch (WebException ex)
            {
                throw ex;
            }
        }
    }

    public class MyObject
    {
        public string success { get; set; }
    }