如何通过依赖注入自定义Microsoft ODataWriterSettings关闭必填空值校验
解决方法
你不需要修改现有MyODataRoutingApplicationModelProvider类的核心逻辑,只需要在注册路由组件时传入自定义的ODataMessageWriterSettings配置即可。
原因说明
你单独实例化的写入器配置没有注册到OData路由的服务容器中,框架默认使用内置的默认配置实例化ODataMessageWriter,所以你之前的配置无法生效。
具体修改步骤
修改MyODataRoutingApplicationModelProvider构造函数中的AddRouteComponents调用,通过重载方法将自定义写入器配置注册到对应路由的服务集合中:
public class MyODataRoutingApplicationModelProvider : IApplicationModelProvider { public MyODataRoutingApplicationModelProvider( IOptions<ODataOptions> options) { // 构造你需要的写入器配置 var writerSettings = new ODataMessageWriterSettings { Validations = ValidationKinds.ThrowOnDuplicatePropertyNames | ValidationKinds.ThrowOnUndeclaredPropertyForNonOpenType }; // 注册路由组件时传入自定义配置 options.Value.AddRouteComponents("odata/{datasource}/{COMPANY_CODE}", EdmCoreModel.Instance, services => { services.AddSingleton(writerSettings); }); } }
生效逻辑
AspNetCore OData每个路由路径都对应独立的服务容器,将自定义ODataMessageWriterSettings作为单例注册到对应路由的服务集合后,框架实例化写入器时会优先使用你注册的配置,不再使用默认配置,即可跳过非空属性的null值校验,同时保留你需要的两项校验规则,完全不需要修改数据层、EDM模型或者Schema定义。
内容的提问来源于stack exchange,提问作者Brian
相关产品推荐
相关产品推荐

