WebApiExceptionHandleFilter
public class WebApiExceptionHandleFilter : ExceptionFilterAttribute
{
ILogger _logger = null;
private ISysEmailListService _sysEmailListService = null;
/// <summary>
///
/// </summary>
public WebApiExceptionHandleFilter()
{
}
/// <summary>
/// 异常时报错处理
/// </summary>
protected override void HandleException(HttpActionExecutedContext actionExecutedContext, string prefix, string ctrlName, string actionName, string userName)
{
if (_logger == null)
{
LazyInitializer.EnsureInitialized(ref _logger, () =>
{
var facLogger = ContainerManager.Container.Resolve<ILoggerFactory>();
return facLogger.CreateLogger<WebApiExceptionHandleFilter>();
});
}
var msg = $"uri=>{actionExecutedContext.Request.RequestUri.AbsoluteUri} userName=>{userName}";
_logger.LogError(new Random().Next(65530), actionExecutedContext.Exception, msg);
//TODO 业务处理
_sysEmailListService = ContainerManager.Container.Resolve<ISysEmailListService>();
//var logFactory = ContainerManager.Container.Resolve<ILoggerFactory>();
//_logger = logFactory.CreateLogger<WebApiExceptionHandleFilter>();
var title = ctrlName + "/" + actionName;
//针对不同控制器不同返回信息的做法
if (string.Equals(ctrlName.ToLower(), "HandQ".ToLower(), StringComparison.CurrentCultureIgnoreCase)|| string.Equals(ctrlName.ToLower(), "Customer".ToLower(), StringComparison.CurrentCultureIgnoreCase))
{
_sysEmailListService.SendEmail("钱包商城系统错误", title,
(actionExecutedContext.Exception+ msg ), SystemStaticParameter.EmallToWallet);
//篡改Response
actionExecutedContext.Response = new HttpResponseMessage(HttpStatusCode.OK);
var mallResult = new Response<string>
{
Status = false,
Message = SystemStaticParameter.HqResponseExc,
Data = "",
Code = ctrlName.ToLower()== "Customer".ToLower() ? SystemStaticParameter.Code1001 : SystemStaticParameter.Code2001
};
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(mallResult);
return;
}
if (string.Equals(ctrlName.ToLower(), "Transaction".ToLower(), StringComparison.CurrentCultureIgnoreCase))
{
_sysEmailListService.SendEmail("钱包webapi交易处理时系统错误", title,
(actionExecutedContext.Exception + msg), SystemStaticParameter.EmallToWallet);
}
if (string.Equals(ctrlName.ToLower(), "Interview".ToLower(), StringComparison.CurrentCulture))
{
_sysEmailListService.SendEmail("钱包webapi面签处理时系统错误", title,
(actionExecutedContext.Exception + msg), SystemStaticParameter.EmallToSigned);
}
var errorCode = "Qb" + ErrorCodeManager.GetErrorCode(actionExecutedContext.Exception);
var result = new ResultModel<string>
{
Result = false,
Message = errorCode + SystemStaticParameter.SystemError,
Data = ""
};
actionExecutedContext.Response = actionExecutedContext.Request.CreateResponse(result);
}
}