ServiceStack AutoQuery查询时触发missing property虚假警告如何解决
原因说明
该警告属于ServiceStack的预期内误告警:通用参数反序列化器会先尝试将所有请求参数和Query请求DTO的属性做匹配,而AutoQuery的>=、<=这类运算符后缀的查询参数是AutoQuery组件单独解析处理的,不会定义在DTO类中,因此通用反序列化器会抛出属性不存在的警告,完全不影响正常请求执行。
解决方案
你可以根据自己的需求选择以下任意一种方式关闭该类告警:
方式1:全局关闭反序列化属性不存在警告
在AppHost配置中添加如下代码,直接禁用该类反序列化错误日志的输出:
SetConfig(new HostConfig { DisableDeserializationErrorMessage = true });
该配置不会影响任何正常功能,适合不需要关注这类反序列化告警的场景。
方式2:仅过滤指定日志源的告警
如果你不想全局关闭所有反序列化警告,可以在日志框架中针对性过滤ServiceStack.Serialization.StringMapTypeDeserializer源的属性不存在告警,以Serilog为例配置如下:
Log.Logger = new LoggerConfiguration() .MinimumLevel.Warning() .Filter.ByExcluding(logEvent => logEvent.SourceContext == "ServiceStack.Serialization.StringMapTypeDeserializer" && logEvent.MessageTemplate.Text.Contains("does not exist on type")) .WriteTo.Console() .CreateLogger();
其他日志框架也可以按照对应规则,匹配日志源和告警内容做过滤即可。
方式3:关闭AutoQuery参数预校验
也可以在AutoQuery插件配置中开启跳过参数预校验,让AutoQuery直接处理参数解析,避免触发通用反序列化的告警:
Plugins.Add(new AutoQueryFeature { SkipAutoQueryParamValidation = true });
内容的提问来源于stack exchange,提问作者specimen
相关产品推荐
相关产品推荐

