【问题标题】:Issues with ReCaptcha in MVCMVC 中的 ReCaptcha 问题
【发布时间】:2019-10-10 17:43:51
【问题描述】:

我已经按照这个问题的答案[问题]How to implement reCaptcha V3 in ASP.NET

对控制器来说一切都很好。我收到一个错误,它“在当前上下文中不存在。我的控制器操作中是否缺少某些内容?

ViewModel -

public class LoginViewModel
{
    [Required]
    [Display(Name = "User Name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }

    public static bool ReCaptchaPassed(string gRecaptchaResponse)
    {
        HttpClient httpClient = new HttpClient();
        var res = httpClient.GetAsync($"https://www.google.com/recaptcha/api/siteverify?secret=My-Secret-Key no quotes&response={gRecaptchaResponse}").Result;
        if (res.StatusCode != HttpStatusCode.OK)
            return false;

        string JSONres = res.Content.ReadAsStringAsync().Result;
        dynamic JSONdata = JObject.Parse(JSONres);
        if (JSONdata.success != "true")
            return false;

        return true;
    }
}

登录后异步 -

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
    {
        //if (!ModelState.IsValid)
        //{
        //    return View(model);
        //}
        if (!ModelState.IsValid) return View(model);
        else
        {
            if (!ReCaptchaPassed(Request.Form["BestenReCaptcha"]))
            {
                ModelState.AddModelError(string.Empty, "You failed the CAPTCHA.");
                return View();
            }
        }
          /// Other actions ///
     }

错误 - 当前上下文中不存在名称“ReCaptchaPassed”

我必须遗漏一些东西,答案被标记为修复,没有其他人发布他们对此有问题。我会在那里问它,但是问题是一个较旧的问题。感谢您的帮助!

【问题讨论】:

  • Request.Form["BestenReCaptcha"]) 是一个字符串对象吗?
  • 这是调用方法的上下文。对你来说,它会是LoginViewModel.RecaptchaPassed(...)
  • @Jasen 这行得通,我真的不敢相信我没有想到这一点……我猜是脑子放屁!感谢您的帮助!
  • 在侧节点上,模型中的函数不是标准的,应该避免。

标签: c# asp.net-mvc recaptcha


【解决方案1】:

链接答案中方法调用的上下文是同一个类。由于您是从不同的类调用静态方法,因此您可以将其称为

LoginViewModel.RecaptchaPassed(Request.Form["BestenReCaptcha"])

【讨论】:

    猜你喜欢
    • 2015-02-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 2018-02-21
    • 1970-01-01
    相关资源
    最近更新 更多