public class ExceptionHandlingAttribute : ExceptionFilterAttribute { public override void OnException(HttpActionExecutedContext context) { var exception = context.Exception.GetBaseException(); var method = context.Request.Method; var url = context.Request.RequestUri; var controllerName = context.ActionContext?.ControllerContext?.ControllerDescriptor?.ControllerName; var actionName = context.ActionContext?.ActionDescriptor?.ActionName; LoggingHelper.Logger.Error($"{method} {url}\r\n{controllerName}.{actionName}()", exception); #if !DEBUG var msg = "An unhandled error occurred."; string stack = null; #else var msg = exception.Message; string stack = context.Exception.StackTrace; #endif var apiError = new ApiError(msg) { Detail = stack }; context.Response.StatusCode = HttpStatusCode.InternalServerError; context.Response.Content = new StringContent(JsonConvert.SerializeObject(apiError), Encoding.UTF8, "application/json"); } } public class ApiError { public string Message { get; set; } public bool IsError { get; set; } public string Detail { get; set; } public ApiError(string message) { this.Message = message; IsError = true; } }
125800cookie-checkC# System.Web.Http Filter ExceptionHandlingAttribute