自定义全局异常处理
一、UserFriendlyException自定义用户友好错误消息
public class UserFriendlyException : BusinessException
{
public UserFriendlyException(
string message,
System.Exception innerException = null)
//message传递给父类BusinessException
: base(
message,
innerException)
{
}
}
二、BusinessException
//继承了系统异常
public class BusinessException : System.Exception,
IBusinessException
{
public LogLevel LogLevel { get; set; }
public BusinessException(
//UserFriendlyException(message)传递给Business的message
string message = null,
System.Exception innerException = null)
//传递给系统异常的message(异常消息)
: base(message, innerException)
{
}
}
三、自定义异常消息格式AjaxResponse
public class AjaxResponse<TData>
{
/// <summary>
/// 异常消息
/// </summary>
public string Message { get; set; }
public AjaxResponse()
{
}
public AjaxResponse(TData data)
{
}
public AjaxResponse(string msg, bool success = false)
{
Message = msg;
}
public static AjaxResponse<TData> Result(bool isSuccess, int code, TData data, string message)
{
return new AjaxResponse<TData>
{
Message = message
};
}
四、StudentExceptionFilter自定义异常类
public class StudentExceptionFilter:IExceptionFilter
{
/// <summary>
/// 重写OnExceptionAsync方法,定义自己的处理逻辑
/// </summary>
/// <param name="context"></param>
/// <returns></returns>
public void OnException(ExceptionContext context)
{
//当使用UserFriendly后,自定义的异常消息,传入到了系统异常中
var exception = context.Exception; //获取异常消息的
//自定义错误消息的格式
var errorInfo = new AjaxResponse<object>("业务处理失败");
//AjaxResponse中的message设置为,返回的异常消息的message
errorInfo.Message = exception.Message;
//设置返回结果为AjaxResponse格式的消息
context.Result = new ObjectResult(errorInfo);
//设置该异常已被处理,因为异常处理不是只有一处,设置处理,其他地方将不在处理
context.ExceptionHandled = true; //Handled!
//设置异常为空
context.Exception = null; //Handled!
}
}
五、自定义异常注入到StartUp中
services.AddControllersWithViews(
options => {
options.Filters.Add(new StudentExceptionFilter());
}
)
本文含有隐藏内容,请 开通VIP 后查看