17 | .NetCore为数据选项添加验证

1. 三种验证方法

  • 直接注册验证函数
  • 实现 IValidateOptions<TOptions>
  • 使用Microsoft.Extensions.Options.DataAnnotations

2. 直接注册验证函数代码

    public static class OrderServiceExtensions
    {
        public static IServiceCollection AddOrderService(this IServiceCollection services,
            IConfiguration configuration)
        {
            //services.Configure<OrderServiceOptions>(configuration);

            //需要添加验证的时候不能用Configure,要用AddOptions
            services.AddOptions<OrderServiceOptions>().Configure(option =>
            {
                configuration.Bind(option);
            }).Validate(option =>
            {
                return option.MaxCount <= 100;
            }, "MaxCount不能大于等于100");

            services.AddSingleton<IOrderService, OrderService>();
            return services;
        }
    
    }

3. 实现实现 IValidateOptions<TOptions>代码

        public static IServiceCollection AddOrderService(this IServiceCollection services,
            IConfiguration configuration)
        {
            //services.Configure<OrderServiceOptions>(configuration);

            //需要添加验证的时候不能用Configure,要用AddOptions
            services.AddOptions<OrderServiceOptions>().Configure(option =>
            {
                configuration.Bind(option);
            }).Services.AddSingleton<IValidateOptions<OrderServiceOptions>, OrderServiceValidateOptions>();

            services.AddSingleton<IOrderService, OrderService>();
            return services;
        }
    
    public class OrderServiceValidateOptions : IValidateOptions<OrderServiceOptions>
    {
        public ValidateOptionsResult Validate(string name, OrderServiceOptions options)
        {
            if(options.MaxCount > 100)
            {
                return ValidateOptionsResult.Fail("MAXCount不能大于100");
            }
            else
            {
                return ValidateOptionsResult.Success;
            }
        }
    }

4. 使用使用Microsoft.Extensions.Options.DataAnnotations代码

        public static IServiceCollection AddOrderService(this IServiceCollection services,
            IConfiguration configuration)
        {
            //services.Configure<OrderServiceOptions>(configuration);

            //需要添加验证的时候不能用Configure,要用AddOptions
            services.AddOptions<OrderServiceOptions>().Configure(option =>
            {
                configuration.Bind(option);
            }).ValidateDataAnnotations();

            services.AddSingleton<IOrderService, OrderService>();
            return services;
        }
    
    public class OrderServiceOptions
    {
        [Range(1,20)]
        public int MaxCount { get; set; } = 100;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值