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));
}
}
}
}