Beispiel #1
0
        /// <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;
        }
Beispiel #2
0
        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!
        }
Beispiel #3
0
    /// <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!
    }
Beispiel #4
0
        /// <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;
        }