我有一个相当标准的 MVC 网站联系页面,其中包括用于清除机器人的 ReCaptcha。一切正常。我向站点添加了移动页面,并且由于可见性问题,目前希望在控制器中仅对移动页面省略重新验证码验证。
在本地,这非常有效,因为我检查了无效的验证码,如果不是移动设备,我将错误添加到模型并在 Catch 块中捕获。如果手机不担心验证码,只需验证模型即可。
[HttpPost, RecaptchaControlMvc.CaptchaValidator]
[ValidateAntiForgeryToken]
public ActionResult Submit(ContactFormViewModel viewModel, bool captchaValid, string captchaErrorMessage)
{
try
{
if (!captchaValid)
if (!HttpContext.Request.Browser.IsMobileDevice)
ModelState.AddModelError("captcha", captchaErrorMessage);
if (ModelState.IsValid)
{
if (viewModel.Save(viewModel))
return RedirectToAction("Thanks");
}
return View("Create");
}
catch (Exception ex)
{ //. . . error processing
}
如上所述,这在本地对设置为 iPhone、iPad 等的 Safari UserAgent 以及适用于各种手机的 Opera 模拟器都非常有效。然而,当我部署到生产环境时,我不断收到提交时抛出的错误,并显示我的验证码错误。对我来说,这意味着 .IsMobileDevice 测试失败。