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); }
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)); }