带首尾空格的数字路由参数Model Binding在部分机器绑定失效问题咨询
影响ASP.NET Core默认模型绑定行为的常见因素
- 全局路由配置差异:若其他运行环境中全局注册了自定义路由约束、路由处理中间件,或者开启了自动修剪路由尾部空格、路由小写转换等配置,会导致未加类型约束的
catalogId参数在进入模型绑定流程前就被修改、过滤甚至截断,无法被属性正常接收。 - 自定义模型绑定器注册:如果项目中全局注册了针对
long?类型或者RequestModel类型的自定义模型绑定器,不同环境的服务配置不一致时,自定义逻辑会覆盖默认的SimpleTypeModelBinder绑定规则,导致空格兼容的解析逻辑失效。 - 发布配置差异:部分机器上的服务发布时如果启用了裁剪(TrimMode)、AOT编译配置,会导致模型绑定依赖的反射元数据丢失,绑定器无法识别
CatalogId属性完成赋值,最终属性值为null。 - Web服务器URL处理规则差异:IIS、Nginx等反向代理服务器的默认URL验证、重写规则可能会自动过滤路由参数中的首尾空格,或者将包含编码空格(
%20)的路由标记为非法请求,截断参数传入应用层的内容,导致绑定失败。 - Mvc全局配置修改:如果服务配置了
MvcOptions中的SuppressInferBindingSourcesForParameters参数为true,或者调整了路由值提供器(RouteValueProvider)的优先级,会干扰[FromRoute]特性的取值逻辑,导致无法正常从路由中读取参数。 - URL解码逻辑差异:不同环境的服务如果配置了自定义的URL解码规则,可能出现双重解码、或者解码后自动忽略空字符的问题,最终传入绑定器的参数值不符合
long.Parse的解析要求。
内容的提问来源于stack exchange,提问作者Dmitriy
相关产品推荐
相关产品推荐

