using FastJSON; using System; using System.Collections; using System.Collections.Generic; namespace Top.Api.Util { /// /// 请求验证器。 /// public sealed class RequestValidator { private const string ERR_CODE_PARAM_MISSING = "40"; private const string ERR_CODE_PARAM_INVALID = "41"; private const string ERR_MSG_PARAM_MISSING = "client-error:Missing required arguments:{0}"; private const string ERR_MSG_PARAM_INVALID = "client-error:Invalid arguments:{0}"; /// /// 验证参数是否为空。 /// /// 参数名 /// 参数值 public static void ValidateRequired(string name, object value) { if (value == null) { throw new TopException(ERR_CODE_PARAM_MISSING, string.Format(ERR_MSG_PARAM_MISSING, name)); } else { if (value.GetType() == typeof(string)) { string strValue = value as string; if (string.IsNullOrEmpty(strValue)) { throw new TopException(ERR_CODE_PARAM_MISSING, string.Format(ERR_MSG_PARAM_MISSING, name)); } } } } /// /// 验证字符串参数的最大长度。 /// /// 参数名 /// 参数值 /// 最大长度 public static void ValidateMaxLength(string name, string value, int maxLength) { if (value != null && value.Length > maxLength) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } /// /// 验证上传文件的最大字节长度。 /// /// 参数名 /// 参数值 /// 最大长度 public static void ValidateMaxLength(string name, FileItem value, int maxLength) { if (value != null && value.GetFileLength() > maxLength) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } /// /// 验证以逗号分隔的字符串参数的最大列表长度。 /// /// 参数名 /// 参数值 /// 最大列表长度 public static void ValidateMaxListSize(string name, string value, int maxSize) { if (value != null) { string[] data = value.Split(','); if (data != null && data.Length > maxSize) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } } /// /// 验证以逗号分隔的字符串参数的最大列表长度。 /// /// 参数名 /// 参数值 /// 最大列表长度 public static void ValidateMaxListSize(string name, List value, int maxSize) { if (value != null) { if (value != null && value.Count > maxSize) { throw new TopException(ERR_CODE_PARAM_INVALID, ERR_MSG_PARAM_INVALID); } } } /// /// 验证以逗号分隔的字符串参数的最大列表长度。 /// /// 参数名 /// 参数值 /// 最大列表长度 public static void ValidateMaxListSize(string name, List value, int maxSize) { if (value != null) { if (value != null && value.Count > maxSize) { throw new TopException(ERR_CODE_PARAM_INVALID, ERR_MSG_PARAM_INVALID); } } } /// /// 验证以逗号分隔的字符串参数的最大列表长度。 /// /// 参数名 /// 参数值 /// 最大列表长度 public static void ValidateMaxListSize(string name, List value, int maxSize) { if (value != null) { if (value != null && value.Count > maxSize) { throw new TopException(ERR_CODE_PARAM_INVALID, ERR_MSG_PARAM_INVALID); } } } /// /// 验证复杂结构数组参数的最大列表长度。 /// /// 参数名 /// 参数值 /// 最大列表长度 public static void ValidateObjectMaxListSize(string name, string value, int maxSize) { if (value != null) { IList list = JSON.Parse(value) as IList; if (list != null && list.Count > maxSize) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } } /// /// 验证字符串参数的最小长度。 /// /// 参数名 /// 参数值 /// 最小长度 public static void ValidateMinLength(string name, string value, int minLength) { if (value != null && value.Length < minLength) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } /// /// 验证数字参数的最大值。 /// /// 参数名 /// 参数值 /// 最大值 public static void ValidateMaxValue(string name, Nullable value, long maxValue) { if (value != null && value > maxValue) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } /// /// 验证数字参数的最小值。 /// /// 参数名 /// 参数值 /// 最小值 public static void ValidateMinValue(string name, Nullable value, long minValue) { if (value != null && value < minValue) { throw new TopException(ERR_CODE_PARAM_INVALID, string.Format(ERR_MSG_PARAM_INVALID, name)); } } } }