|
|
|
|
@ -4,6 +4,7 @@ using System.Web.Http;
|
|
|
|
|
using System.Web.Http.Filters;
|
|
|
|
|
using CncModels.Dto;
|
|
|
|
|
using CncService;
|
|
|
|
|
using log4net;
|
|
|
|
|
|
|
|
|
|
namespace CncWebApi.Filters
|
|
|
|
|
{
|
|
|
|
|
@ -14,6 +15,8 @@ namespace CncWebApi.Filters
|
|
|
|
|
/// </summary>
|
|
|
|
|
public class GlobalExceptionFilter : ExceptionFilterAttribute
|
|
|
|
|
{
|
|
|
|
|
private static readonly ILog _log = LogManager.GetLogger(typeof(GlobalExceptionFilter));
|
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 异常发生时自动调用
|
|
|
|
|
/// </summary>
|
|
|
|
|
@ -23,6 +26,7 @@ namespace CncWebApi.Filters
|
|
|
|
|
if (context.Exception is BusinessException bex)
|
|
|
|
|
{
|
|
|
|
|
// 业务异常:返回对应的错误码和消息
|
|
|
|
|
_log.Warn($"业务异常: [{bex.Code}] {bex.Message}");
|
|
|
|
|
var response = ApiResponse<object>.Fail(bex.Code, bex.Message);
|
|
|
|
|
context.Response = context.Request.CreateResponse(
|
|
|
|
|
HttpStatusCode.OK, response);
|
|
|
|
|
@ -30,7 +34,8 @@ namespace CncWebApi.Filters
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
// 未预期异常:返回通用错误提示,不暴露内部细节
|
|
|
|
|
// 详细异常信息由log4net记录到日志文件
|
|
|
|
|
var requestUrl = context.Request?.RequestUri?.ToString();
|
|
|
|
|
_log.Error($"未处理异常: {requestUrl}", context.Exception);
|
|
|
|
|
var response = ApiResponse<object>.Fail(
|
|
|
|
|
CncModels.Constants.ErrorCode.InternalError,
|
|
|
|
|
"服务器内部错误,请稍后重试");
|
|
|
|
|
|