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

如何通过依赖注入自定义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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 17:15:06