using System.ComponentModel;
using System.Reflection;
using System.Runtime.Serialization;
using Masuit.Tools.Systems;
using static EasyTemplate.Tool.Entity.PublicEnum;
namespace EasyTemplate.Tool;
public class Oops
{
///
/// 友好异常抛出
///
/// 错误消息
///
public static FriendlyException Oh(string errorMessage)
{
var ex = new FriendlyException(errorMessage, 400, true);
return ex;
}
///
/// 友好异常抛出,仅支持简体中文
///
/// 错误码
///
public static FriendlyException Oh(ErrorCode errorCode)
{
var ex = new FriendlyException(errorCode.GetDescription(), errorCode);
ex.StatusCode = 600;
return ex;
}
///
/// 扩展方法,获得枚举的Description
///
/// 枚举值
/// 当枚举值没有定义DescriptionAttribute,是否使用枚举名代替,默认是使用
/// 枚举的Description
public static string GetDescription(Enum value, Boolean nameInstead = true)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name == null)
{
return null;
}
FieldInfo field = type.GetField(name);
DescriptionAttribute attribute = System.Attribute.GetCustomAttribute(field, typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attribute == null && nameInstead == true)
{
return name;
}
return attribute?.Description;
}
}
public class FriendlyException : Exception
{
//
// 摘要:
// 错误码
public object ErrorCode { get; set; }
//
// 摘要:
// 错误码(没被复写过的 ErrorCode )
public object OriginErrorCode { get; set; }
//
// 摘要:
// 错误消息(支持 Object 对象)
public object ErrorMessage { get; set; }
//
// 摘要:
// 状态码
public int StatusCode { get; set; } = 400;
//
// 摘要:
// 是否是数据验证异常
public bool ValidationException { get; set; }
//
// 摘要:
// 额外数据
public new object Data { get; set; }
//
// 摘要:
// 构造函数
//
// 参数:
// message:
//
// errorCode:
public FriendlyException(string message, object errorCode)
: base(message)
{
ErrorMessage = message;
ErrorCode = (OriginErrorCode = errorCode);
}
///
/// 构造函数
///
///
///
public FriendlyException(string message, object errorCode,bool validationException)
: base(message)
{
ErrorMessage = message;
ErrorCode = (OriginErrorCode = errorCode);
ValidationException = validationException;
}
//
// 摘要:
// 构造函数
//
// 参数:
// message:
//
// errorCode:
//
// innerException:
public FriendlyException(string message, object errorCode, Exception innerException)
: base(message, innerException)
{
ErrorMessage = message;
ErrorCode = (OriginErrorCode = errorCode);
}
//
// 摘要:
// 构造函数
//
// 参数:
// info:
//
// context:
public FriendlyException(SerializationInfo info, StreamingContext context)
: base(info, context)
{
}
}