添加自定义业务异常类
public class BusinessException : Exception
{
public BusinessException(){}
public BusinessException(string message) : base(message)
{}
public BusinessException(string message, Exception innerException) : base(message, innerException)
{}
}
添加全局异常过滤器
public class InternalServerErrorObjectResult : ObjectResult
{
public InternalServerErrorObjectResult(object value) : base(value)
{
StatusCode = StatusCodes.Status500InternalServerError;
}
}
public class JsonErrorReponse
{
public string Message { get; set; }
public string DeveloperMessage { get; set; }
}
public class GlobalExceptionFilter : IExceptionFilter
{
private readonly IWebHostEnvironment _env;
private readonly ILogger<GlobalExceptionFilter> _logger;
public GlobalExceptionFilter(IWebHostEnvironment env, ILogger<GlobalExceptionFilter> logger)
{
_env = env;
_logger = logger;
}
public void OnException(ExceptionContext context)
{
var json = new JsonErrorReponse();
if (context.Exception.GetType() == typeof(BusinessException))
{
json.Message = context.Exception.Message;
context.Result = new BadRequestObjectResult(json);
}
else
{
json.Message = "服务器发生了意外的内部错误";
if (_env.IsDevelopment())
{
json.DeveloperMessage = context.Exception.StackTrace;
}
context.Result = new InternalServerErrorObjectResult(json);
}
_logger.LogError(context.Exception, context.Exception.Message);
context.ExceptionHandled = true;
}
}
向容器添加服务
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc(options => options.Filters.Add(typeof(GlobalExceptionFilter)));
}