VS2019调试.NET Core3.1 Fluent Validation验证器无法查看变量值问题
Fluent Validation验证器运行时变量无法查看的解决方法
该问题的根本原因:Fluent Validation的验证规则定义代码是在验证器类实例化(一般为应用启动时的服务注册阶段)执行的,你在构造函数内的
When、RuleFor定义行打断点,命中时还没有实际的业务请求传入,自然无法获取到Count、Offset等运行时的属性值。只有规则中的委托逻辑(比如When的条件判断、自定义验证逻辑)是每次处理请求时才会执行,此时会传入实际的请求实例。
你可以用以下几种方法排查:
- 调整断点位置
将断点打在规则的委托内部而非规则定义行,你可以把原有代码调整为带代码块的委托形式方便打断点:When(x => { // 此处打断点即可直接查看当前请求实例x的所有属性,包括Count、Offset return x.Count != null && x.Count >= 0; }, () => { RuleFor(x => x.Offset).NotNull().Must((req, offset) => { // 此处也可打断点,同时查看请求实例req和当前验证的Offset值 return Regex.IsMatch(offset?.ToString() ?? string.Empty, isNumber); }).WithErrorCode(errCode.somethingwrong); }); - 修改VS2019调试配置
打开顶部菜单「工具」>「选项」>「调试」>「常规」,做如下修改:- 取消勾选「启用仅我的代码」
- 勾选「启用源服务器支持」
调试命中断点后,手动在监视窗口添加x.Count、x.Offset即可查看值,不要直接拖拽代码定义里的变量,那是构造函数的形参,和运行时的请求实例不是同一个上下文。
- 临时输出调试日志
在需要查看值的委托内部插入调试输出代码:
调试时在VS的「输出」窗口即可看到每次验证时的变量值,排查完成后删除即可。Debug.WriteLine($"Count: {x.Count}, Offset: {x.Offset}");
内容的提问来源于stack exchange,提问作者R M
相关产品推荐
相关产品推荐

