/// <summary> /// 处理并包装异常 /// </summary> /// <param name="context">异常上下文</param> protected virtual async Task HandleAndWrapException(ExceptionContext context) { context.HttpContext.Response.Headers.Add(BingHttpConst.BingErrorFormat, "true"); context.HttpContext.Response.StatusCode = (int)context .GetRequiredService <IHttpExceptionStatusCodeFinder>() .GetStatusCode(context.HttpContext, context.Exception); var exceptionHandlingOptions = context.GetRequiredService <IOptions <BingExceptionHandlingOptions> >().Value; var exceptionToErrorInfoConverter = context.GetRequiredService <IExceptionToErrorInfoConverter>(); var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, exceptionHandlingOptions.SendExceptionDetailsToClients); // TODO: 此处考虑是否还要抽象个对象存放信息 context.Result = new ApiResult(Conv.ToInt(remoteServiceErrorInfo.Code), remoteServiceErrorInfo.Message); var logLevel = context.Exception.GetLogLevel(); var remoteServiceErrorInfoBuilder = new StringBuilder(); remoteServiceErrorInfoBuilder.AppendLine($"---------- {nameof(RemoteServiceErrorInfo)} ----------"); remoteServiceErrorInfoBuilder.AppendLine(JsonHelper.ToJson(remoteServiceErrorInfo, indented: true)); var logger = context.GetService <ILogger <BingExceptionFilter> >(NullLogger <BingExceptionFilter> .Instance); logger.LogWithLevel(logLevel, remoteServiceErrorInfoBuilder.ToString()); logger.LogException(context.Exception, logLevel); await context.GetRequiredService <IExceptionNotifier>().NotifyAsync(new ExceptionNotificationContext(context.Exception)); context.Exception = null; }
protected virtual async Task HandleAndWrapException(ExceptionContext context) { //TODO: Trigger an AbpExceptionHandled event or something like that. context.HttpContext.Response.Headers.Add(AbpHttpConsts.AbpErrorFormat, "true"); context.HttpContext.Response.StatusCode = (int)context .GetRequiredService <IHttpExceptionStatusCodeFinder>() .GetStatusCode(context.HttpContext, context.Exception); var exceptionHandlingOptions = context.GetRequiredService <IOptions <AbpExceptionHandlingOptions> >().Value; var exceptionToErrorInfoConverter = context.GetRequiredService <IExceptionToErrorInfoConverter>(); var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, exceptionHandlingOptions.SendExceptionsDetailsToClients); context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); var logLevel = context.Exception.GetLogLevel(); var remoteServiceErrorInfoBuilder = new StringBuilder(); remoteServiceErrorInfoBuilder.AppendLine($"---------- {nameof(RemoteServiceErrorInfo)} ----------"); remoteServiceErrorInfoBuilder.AppendLine(context.GetRequiredService <IJsonSerializer>().Serialize(remoteServiceErrorInfo, indented: true)); var logger = context.GetService <ILogger <AbpExceptionFilter> >(NullLogger <AbpExceptionFilter> .Instance); logger.LogWithLevel(logLevel, remoteServiceErrorInfoBuilder.ToString()); logger.LogException(context.Exception, logLevel); await context.GetRequiredService <IExceptionNotifier>().NotifyAsync(new ExceptionNotificationContext(context.Exception)); context.Exception = null; //Handled! }
/// <summary> /// 处理与包装异常 /// </summary> /// <param name="context"></param> /// <returns></returns> protected virtual async Task HandleAndWrapException(ExceptionContext context) { //TODO: Trigger an ExceptionHandled event or something like that. var exceptionHandlingOptions = context.GetRequiredService <IOptions <ExceptionHandlingOptions> >().Value; var exceptionToErrorInfoConverter = context.GetRequiredService <IExceptionToErrorInfoConverter>(); var remoteServiceErrorInfo = exceptionToErrorInfoConverter.Convert(context.Exception, options => { options.SendExceptionsDetailsToClients = exceptionHandlingOptions.SendExceptionsDetailsToClients; options.SendStackTraceToClients = exceptionHandlingOptions.SendStackTraceToClients; }); var logLevel = context.Exception.GetLogLevel(); var remoteServiceErrorInfoBuilder = new StringBuilder(); remoteServiceErrorInfoBuilder.AppendLine($"---------- {nameof(RemoteServiceErrorInfo)} ----------"); remoteServiceErrorInfoBuilder.AppendLine(JsonSerializer.Serialize(remoteServiceErrorInfo)); var logger = context.GetService <ILogger <ExceptionFilter> >(NullLogger <ExceptionFilter> .Instance); logger.Log(logLevel, remoteServiceErrorInfoBuilder.ToString()); logger.LogException(context.Exception, logLevel); //await context.GetRequiredService<IExceptionNotifier>().NotifyAsync(new ExceptionNotificationContext(context.Exception)); if (context.Exception is AuthorizationException) { await context.HttpContext.RequestServices .GetRequiredService <IAuthorizationExceptionHandler>() .HandleAsync(context.Exception.As <AuthorizationException>(), context.HttpContext); } else { //context.HttpContext.Response.Headers.Add(HttpConsts.ErrorFormat, "true"); context.HttpContext.Response.StatusCode = (int)context .GetRequiredService <IHttpExceptionStatusCodeFinder>() .GetStatusCode(context.HttpContext, context.Exception); context.Result = new ObjectResult(new RemoteServiceErrorResponse(remoteServiceErrorInfo)); } context.Exception = null; //Handled! }
/// <summary> /// 处理并包装异常 /// </summary> /// <param name="context">异常上下文</param> protected virtual async Task HandleAndWrapException(ExceptionContext context) { await context.GetRequiredService <IExceptionNotifier>().NotifyAsync(new ExceptionNotificationContext(context.Exception)); context.Exception = null; }