You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
3.9 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
using System.Linq.Expressions;
using System.Text;
using VOL.Core.Extensions;
using VOL.Entity.DomainModels;
namespace VOL.Core.ObjectActionValidator
{
/// <summary>
/// 对方法指定属性校验,此处配置完成就不用每处都写if esle判断值是合法
/// 与自带模型校验相比此处可以通过表达式校验指定字段也不用担心model字段变化后还去手动修改配置的问题
/// 目前只支持普通属性,不支持复杂类型
/// </summary>
public static class ValidatorContainer
{
/// <summary>
/// model校验配置
/// 方法参数名必须与枚举名称一致(不区分大小写),如public void Test(LoginInfo login)
/// 表达式是model必须要验证的字段如果不填默认验证整个model
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection UseMethodsModelParameters(this IServiceCollection services)
{
//登陆方法校验参数,只验证密码与用户名
ValidatorModel.Login.Add<LoginInfo>(x => new { x.Password, x.UserName,x.VerificationCode,x.UUID });
//只验证LoginInfo的密码字段必填
ValidatorModel.LoginOnlyPassWord.Add<LoginInfo>(x => new { x.Password });
return services;
}
/// <summary>
/// 普通属性校验
/// 方法上添加[ObjectGeneralValidatorFilter(ValidatorGeneral.xxx)]即可进行参数自动验证
/// ValidatorGeneral为枚举(也是方法的参数名),自己需要校验的参数在枚举上添加
/// ValidatorGeneral.xxx.Add() 配置自己的验证规则
/// </summary>
/// <param name="services"></param>
/// <returns></returns>
public static IServiceCollection UseMethodsGeneralParameters(this IServiceCollection services)
{
//配置用户名最多30个字符
ValidatorGeneral.UserName.Add("用户名", 30);
//方法参数名为newPwd直接在方法加上[ObjectGeneralValidatorFilter(ValidatorGeneral.NewPwd)]进行参数验证
//如果newPwd为空会提示新密码不能为空
//6,50代表newPwd参数最少6个字符最多50个符
//其他需要验证的参数同样配置即可
ValidatorGeneral.NewPwd.Add("新密码", 6, 50);
//如果OldPwd为空会提示旧密码不能为空
ValidatorGeneral.OldPwd.Add("旧密码");
//校验手机号码格式
ValidatorGeneral.PhoneNo.Add("手机号码", (object value) =>
{
ObjectValidatorResult validatorResult = new ObjectValidatorResult(true);
if (!value.ToString().IsPhoneNo())
{
validatorResult = validatorResult.Error("请输入正确的手机号码");
}
return validatorResult;
});
//测试验证字符长度为6-10
ValidatorGeneral.Local.Add("所在地",6,10);
//测试验证数字范围
ValidatorGeneral.Qty.Add("存货量",ParamType.Int, 200, 500);
return services;
}
}
//方法参数是实体配置验证字段
public enum ValidatorModel
{
Login,
LoginOnlyPassWord//只验证密码
}
/// <summary>
/// 方法普通参数名配置(枚举的名字必须与参数名字一样,不区分大小写)
/// 通过在方法加上[ObjectGeneralValidatorFilter(ValidatorGeneral.UserName, ValidatorGeneral.PassWord)]指定要验证的参数
/// </summary>
public enum ValidatorGeneral
{
UserName,
OldPwd,
NewPwd,
PhoneNo,
Local,//测试验证字符长度
Qty//测试 验证值大小
}
}