Exemple #1
0
        public void OnException(ExceptionContext context)
        {
            var exception     = context.Exception;
            var loggerFactory = (ILoggerFactory)context.HttpContext.RequestServices.GetRequiredService(typeof(ILoggerFactory));
            var logging       = loggerFactory.CreateLogger <MyExceptionFilter>();

            logging.LogCritical(exception, "未处理异常");
            var hostEnviroment = (IHostingEnvironment)context.HttpContext.RequestServices.GetRequiredService(typeof(IHostingEnvironment));
            var problemDetails = new MyProblemDetails()
            {
                Type   = $"http://XXXXX/unhandledexception/{exception.GetType()}",
                Title  = exception.Message,
                Status = StatusCodes.Status500InternalServerError
            };

            if (!hostEnviroment.IsProduction())
            {
                problemDetails.Detail = exception.ToString();
            }

            context.Result = new MyProblemDetailsActionResult(problemDetails);
        }
Exemple #2
0
        public IActionResult GetClientError(ActionContext actionContext, IClientErrorActionResult clientError)
        {
            IMyProblemDetails problemDetails;

            if (clientError is IMyProblemDetailsActionResult problemDetailsActionResult)
            {
                problemDetails = problemDetailsActionResult.ProblemDetails;
            }
            else
            {
                problemDetails = new MyProblemDetails()
                {
                    Status = clientError.StatusCode,
                    Type   = "about:blank",
                };
                if (clientError.StatusCode is int statusCode &&
                    _options.ClientErrorMapping.TryGetValue(statusCode, out var errorData))
                {
                    problemDetails.Title = errorData.Title;
                    problemDetails.Type  = errorData.Link;
                }
            }
            return(MyProblemDetailsActionResult.GetActionResult(actionContext, problemDetails));
        }