在.NET 5和Microsoft.AspNetCore.OData 8.0.2中使用数据有效载荷值转换器

pcww981p  于 2023-03-13  发布在  .NET
关注(0)|答案(1)|浏览(93)

我有一个ODataPayloadValueConverter,我正在尝试将其添加到我的配置中

public class DateTimeValueLocaliser : ODataPayloadValueConverter {
    public override object ConvertToPayloadValue(object value, IEdmTypeReference edmTypeReference)
    {
        if (value is DateTime)
        {
            return new DateTime();
        }
        else
        {
            return base.ConvertToPayloadValue(value, edmTypeReference);
        }
    } }

我的启动. cs

services.AddControllers(options =>
        {
            options.EnableEndpointRouting = false;
            var policy = new AuthorizationPolicyBuilder()
                .RequireAuthenticatedUser()
                .Build();
            options.Filters.Add(new AuthorizeFilter(policy));
        })
        .SetCompatibilityVersion(CompatibilityVersion.Latest)
        .AddNewtonsoftJson(opt =>
        {
            opt.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;
            opt.SerializerSettings.ContractResolver = new DefaultContractResolver();
            opt.SerializerSettings.Formatting = Formatting.Indented;
        }).AddOData(options =>
        {
            options.AddRouteComponents("odata", new MyODataModelBuilder().GetEdmModel());
        });
    services.AddMvcCore();

我应该如何以及在何处将有效载荷值转换器添加到配置中?我可以将其添加到模型构建器IEdmModel函数中吗?

yfwxisqw

yfwxisqw1#

自.NET 5以来,这一点已发生变化,您现在可以在AddRouteComponents中进行设置

.AddOData(options =>
        {
            options.AddRouteComponents("odata", GetEdmModel(), action =>
            {
                action.AddSingleton(typeof(ODataPayloadValueConverter), new ODataByteArrayAsHexJsonConverter());
            })
            .Filter().Select().Expand().Count().OrderBy().SetMaxTop(50).SkipToken();
        });

也请查看以下文章。NET核心Web API与ODATA序列化DateTime

相关问题