ASP.NET Core 2.0 API中Remote属性模型验证方法未触发问题
排查Remote属性未触发控制器方法的问题
我来帮你解决这个Remote验证没生效的问题,之前做ASP.NET项目时我也踩过类似的坑,咱们一步步梳理排查:
1. 控制器名称写错了(最常见的原因)
你在Remote属性里写的是"RegistrationAPIController",但ASP.NET MVC/Core中,控制器名称需要去掉"Controller"后缀。你的控制器类叫RegistrationAPIController,所以Remote里应该写"RegistrationAPI"才对。
修改后的模型代码:
public class APIBusinessDetailModel { [Required(ErrorMessage = "Industry is required")] // 移除Controller后缀 [Remote("CheckRecordExists", "RegistrationAPI", ErrorMessage = "Not a valid Industry in Business Model")] public string Industry { get; set; } // 其他字段保持不变 public string RegisteredBusinessType { get; set; } public string ABN { get; set; } public string BusinessBriefDescription { get; set; } public string BusinessStreet { get; set; } public string BusinessCity { get; set; } public string BusinessState { get; set; } public string BusinessPostcode { get; set; } public string BusinessWebsite { get; set; } }
2. 确保客户端验证已启用
Remote验证依赖客户端脚本触发,你需要确认页面中加载了必要的验证脚本:
- 若是ASP.NET MVC:页面必须引入
jquery.validate.js和jquery.validate.unobtrusive.js - 若是ASP.NET Core:除了引入上述脚本,还要在Program/Startup中启用客户端验证:
builder.Services.AddMvc(options => { options.ClientValidationEnabled = true; options.UnobtrusiveJavaScriptEnabled = true; });
3. 匹配请求方法与路由规则
如果你的RegistrationAPIController是带[ApiController]属性的API控制器,默认Action可能只接受POST请求,但Remote属性默认用GET请求,这会导致请求被拒绝。你可以在Remote属性里指定HttpMethod,同时给控制器方法加上对应的特性:
模型修改:
[Remote("CheckRecordExists", "RegistrationAPI", HttpMethod = "POST", ErrorMessage = "Not a valid Industry in Business Model")] public string Industry { get; set; }
控制器方法修改:
[HttpPost] public async Task<JsonResult> CheckRecordExists(string Industry) { // 这里加入实际的数据库校验逻辑,比如查询是否存在该Industry bool isIndustryValid = await _dbContext.Industries.AnyAsync(i => i.Name == Industry); // 验证通过返回true,不通过返回错误信息 return Json(isIndustryValid ? true : "Not a valid Industry in Business Model"); }
4. 检查参数名称与模型绑定
你的参数名Industry和模型字段名一致,这部分没问题。但如果API控制器用了[FromBody]这类绑定特性,可能需要调整参数接收方式,不过Remote验证场景下,直接用字符串参数是完全可行的,保持当前写法即可。
按照上面的步骤调整后,应该就能正常触发控制器的CheckRecordExists方法了。
内容的提问来源于stack exchange,提问作者maxspan
相关产品推荐
相关产品推荐

