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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:05:08